Mysql
此查詢要索引哪一列?
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
——如果你沒有合適的索引,這個任務將是一個表掃描(慢)。否則會很快。