假设我有四个表的连接,表1通过外键关系引用其他3个表(表2,3,4):
SELECT a.column_a, b.column_b, c.column_c, d.column_d
FROM Table1 a, Table2 b, Table3 c, Table4 d
WHERE a.col1_fk=d.col_id
AND a.col2_fk=c.col_id
AND a.col3_fk=b.col_id
为了对上述语句进行最佳优化,连接条件是否与SELECT语句的列的顺序相同?因此,我上面的例子是最不优化的吗?或者说上述顺序不重要?
答案 0 :(得分:2)
这并不重要。查询优化器决定首先读取哪个表
当您的数据量增长时,这也可能会发生变化。例如,有一天,您的WHERE
子句会过滤90%的表,因此MySQL决定先读取此表。一千INSERT
秒之后,相同的WHERE
子句可能只过滤1%。然后MySQL可能会决定最后读取它,甚至可以进行全表扫描。
不要担心这种优化。如果您想进行优化,请阅读EXPLAIN
(除了使用if和使用哪些索引外,还会显示读取表的顺序)和learn to use indexes。
并且,没有冒犯,你应该真正学到的是1992年ANSI SQL标准引入的正确连接语法。Here是一些例子。