需求:想要對兩張千萬級别的表進行join查詢二者的差集,兩張表都建立了索引,按理來說查詢速度應該是比較快的,但是查了一晚上都沒有查出來,最後排查發現了問題的根源,join字段對應的資料類型不一緻導緻;
這裡還要繼續總結一下還需注意的問題,
1、首先要進行join查詢,最好用left或者right join方法。
2、當兩個表的待查詢字段的資料類型不一緻時候索引是失效的。
3、兩個表join查詢時候的引擎要一緻;
4、兩表join查詢字段長度要一緻;
5、兩表join查詢字元集要一緻;
6、char類型是不能轉化為int的
ps:排查mysql可以用explain,但是還沒有用過,以後用到再寫使用方法。但是explain不是萬能的。
實際生産中的sql往往比較複雜,如果資料量過了百萬,加了索引後效果還是不理想,使用叢集。
Tips:
1:加了索引,依然全表掃描的可能情況有:
索引列為字元串,而沒帶引号;
索引列沒出現在where條件後面;
索引列出現的位置沒在前面。
2:關聯查詢不走索引的可能情況有:
關聯的多張表的字元集不一樣;
關聯的字段的字元集不一樣;
存儲引擎不一樣;
字段的長度不一樣。