SQL:在 Where 子句之后加入
Posted
技术标签:
【中文标题】SQL:在 Where 子句之后加入【英文标题】:SQL : Join after Where Clause 【发布时间】:2019-01-12 21:35:12 【问题描述】:我有一个很大的 SQL 语句。
但我想测试 firsttable (T1) 上的 where 子句,然后在使用 where 子句选择的行上进行所有连接。
因为实际上查询很慢,导致mysql将所有表join到t1,然后测试where子句!
SELECT * from FIRSTTABLE T1
LEFT JOIN T2 on (....)
LEFT JOIN T3 on (....)
WHERE T1.column = '1' OR T1.column= '5'
有什么想法吗?
【问题讨论】:
使用explain
找出您需要索引的位置
在查询优化问题中,您应该为查询中的每个表包含 SHOW CREATE TABLE 你可以这样做:
SELECT * from
(
SELECT * from FIRSTTABLE T1
WHERE T1.column = '1' OR T1.column= '5'
) as T2
LEFT JOIN T3 on (....)
LEFT JOIN T4 on (....)
【讨论】:
【参考方案2】:评论太长了。
SQL 查询在执行之前被编译和优化。查询中子句的顺序实际上与最终的执行计划无关。更具体地说,WHERE
子句中的过滤条件可以发生在JOIN
处理之前、之后甚至期间。
您可以通过了解索引开始了解 SQL 优化。 MySQL 文档是一个非常合理的起点。
【讨论】:
即使 where 语句只过滤原始表而不是连接表也没有技巧? @Anthony 。 . .优化器根据数据和可用索引的统计信息来决定查询的运行方式。 (还剩 180 个字符)以上是关于SQL:在 Where 子句之后加入的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:在使用where子句的同时将2行值转换为1列并加入它
哪个更快? Spark SQL with Where 子句或在 Spark SQL 之后在 Dataframe 中使用过滤器