[mysql] join查詢沒有走索引的原因


把行數最小的作為主表,然后去join行數多的,這樣對於索引而言掃描的行數會少很多

在join之后On的條件,類型不同是無法走索引的,也就是說如果on A.id = B.id,雖然A表和B表的id都設置了索引,但是A表的id是Int,而B表的id是varchar,則無法走索引

字符編碼也會導致無法走索引。字符編碼常見的是utf8和utf8mb4,utf8mb4是可以兼容utf8的,也就是說如果A表是utf8mb4,B表是utf8,則on A.uinstanceid = B. uinstanceid是可以走索引的,但是如果把B表當作主表,讓B去join A on B.uinstanceid = A. uinstanceid則無法走索引

 

在我的項目里,就是上面的字符編碼問題導致的join后沒有走索引

改表和字段的字符編碼,統一成ut8mb4

ALTER TABLE visitor DEFAULT CHARSET utf8mb4;
ALTER TABLE visitor CHANGE visitor_id visitor_id varchar(100) CHARACTER SET utf8mb4 NOT NULL DEFAULT '';


免責聲明!

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



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