Mysql多表联合查询:
首先搞清楚一个概念:笛卡尔积,驱动表
关于笛卡尔积:
简言之就是强拼,不带条件的硬拼2(多)张表,结果就是直接做乘法
SELECT * FROM a CROSS JOIN b;
SELECT * FROM a INNER JOIN b;
SELECT * FROM a,b;
SELECT * FROM a NATURE JOIN b;
SELECT * FROM a NATURA join b;
例子:SELECT * FROM a LEFT JOIN b;
关于驱动表:
如何判断驱动表
如果没有where条件
左连接,如果没有where条件,则左表为驱动表
右连接,如果没有where条件,右表为驱动表
explain规则:explain语句结果中,第一行为驱动表(该定律适用于join;子查询的话要分情况)
性能优化相关
①选谁做驱动表
引用一个举烂了的例子,在没有过滤条件的情况下,外表有多少行就会被加载多少次;
参考《索引设计与优化》这本书的说法,每次加载相当于一次随机读;
假设A表10000行,B表100行;也就是说如果用A表做驱动表会伴随着10000次随机读,而如果是B表作为驱动表,会伴随着100次随机