SQL:在where子句后加入

时间:2019-01-12 21:35:13

标签: mysql sql query-optimization

我有一条重要的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'

有什么想法吗?

2 个答案:

答案 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 (....)