要想明白多表连接过程中索引是否起作用,哪个表的索引起作用。
首先先了解在join连接时哪个表是驱动表,哪个表是被驱动表:
1.当使用left join时,左表是驱动表,右表是被驱动表,
2.当使用right join时,右表时驱动表,左表是被驱动表,
3.当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表。
下面就为示例分析,供您参考学习,如有不对的地方请指正。
现有两张表scan_necessary与necessary。scan_necessary表创建了普通索引necessaryid_index且数据量大,necessary表创建了普通索引guid_index且数据量小。
left join
explain select * from scan_necessary a left join necessary b on a.NECESSARY_ID=b.GUID;
explain select * from necessary a left join scan_necessary b on a.guid=b.NECESSARY_ID;
right join
explain select * from scan_necessary a right join necessary b on a.NECESSARY_ID=b.GUID;
explain select * from necessary a right join scan_necessary b on a.guid=b.NECESSARY_ID;
join
explain select * from scan_necessary a join necessary b on a.NECESSARY_ID=b.GUID;
explain select * from necessary a join scan_necessary b on a.guid=b.NECESSARY_ID;
总结
多表连接时永远是被驱动表的索引起作用