我有一条重要的SQL语句。
但是我想测试firsttable(T1)上的where子句,然后,使用where子句对选定的行进行所有联接。
因为实际上查询非常慢,导致MySQL将所有表联接到t1,然后测试where子句!
SELECT * from FIRSTTABLE T1
LEFT JOIN T2 on (....)
LEFT JOIN T3 on (....)
WHERE T1.column = '1' OR T1.column= '5'
有什么想法吗?
答案 0 :(得分:1)
这个评论太长了。
SQL查询在执行前先进行编译和优化。查询中子句的顺序实际上与最终执行计划无关。更具体地说,WHERE
子句中的过滤条件可以在JOIN
处理之前,之后或什至期间进行。
您可以通过了解索引来开始学习SQL优化。 MySQL文档是一个非常合理的起点。
答案 1 :(得分:1)
您可以执行以下操作:
SELECT * from
(
SELECT * from FIRSTTABLE T1
WHERE T1.column = '1' OR T1.column= '5'
) as T2
LEFT JOIN T3 on (....)
LEFT JOIN T4 on (....)