Mysql

此查詢要索引哪一列?

  • December 26, 2018
select DISTINCT id_request,username_request
from darkhast_follower
where darkhast_follower.id_request != '9762952594' 
 AND darkhast_follower.id_request != 'null' 
 AND darkhast_follower.status !=1 
 AND NOT exists ( select *
                  from log_follow 
                  where log_follow.other_id = darkhast_follower.id_request 
                  AND log_follow.id= '9762952594') 
LIMIT 5

應該索引哪一列?或者替換它的最佳查詢是什麼?

沒有索引對inequality.

如果您有 N 行的表並key=val產生k結果行,則key!=val產生N-k行。取決於鍵的選擇性 N-k趨於N. 所以不等式搜尋相當於對所有情況進行全表掃描,不能通過索引來改進。

別說

!= 'null' 

相反,說

IS NOT NULL

也就是說,除非您實際上將 4 個字元“null”儲存在VARCHAR?

索引:

log_follow:  INDEX(other_id, id)   -- for the subquery
darkhast_follower:   no index is useful for this query

正如您所擁有的那樣,查詢將掃描,darkhast_follower直到找到與所有WHERE子句匹配的 5 行。這樣做時,它會檢查log_follow——如果你沒有合適的索引,這個任務將是一個表掃描(慢)。否則會很快。

引用自:https://dba.stackexchange.com/questions/225530