Impossible WHERE noticed after reading const tables


阿里雲反饋的慢SQL,執行計划返回如下:Impossible WHERE noticed after reading const tables

 

sql很簡單:

SELECT * FROM deposit_transaction 
WHERE request_Id = 'XXX'

 

而且該表的request_id創建了唯一索引:很明顯,這個字段是保持冪等操作的,通過數據庫的唯一索引實現;

每次數據落地前,都要執行該SQL查詢是否記錄存在,而數據庫做冪等兜底;

如果request_id不存在,竟然沒有走request_id的唯一索引....

 

問題是:

基本99.99%的查詢,肯定數據庫不存在呀!

可是,mysql的innoDB引擎,主鍵查詢或者唯一性索引查詢,如果這條數據沒有的話,它會 全表掃描,然后得出一個結論,該數據不在表中。
對於高並發的庫來說,這條數據,會讓負載特別的高
 
 
所以:
高並發系統,建議通過緩存做冪等校驗,數據庫唯一索引兜底!或者直接通過數據庫的唯一索引兜底
 
普通系統,並發小,數據量又不大,那就查詢一把唄,IO高,可是不影響嘛!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM