【发布时间】:2016-11-19 20:28:45
【问题描述】:
在编写带有各种where 子句的 SQL 查询时(我只使用 MySQL 和 sqlite),我通常对重新排序查询子句以放置首先是“最好的”(将删除更多行的那些),然后是其他“修饰”子句(几乎不会改变输出)。换句话说,我怀疑我是否真的会通过重新排序子句来帮助优化器更快地运行(特别是当有索引在起作用时),或者它是否可能是另一种过早优化的情况。优化人员通常比我聪明。
例如:
select address.* from address inner join
user on address.user = user.id
where address.zip is not null and address.country == user.country
如果我们知道address.zip 通常不为空,则该检查将有 90% 为真,并且如果查询顺序得到遵守,则会有很多虚拟检查,可以通过放置 country 来避免检查之前。
我应该照顾它吗?换句话说,where 子句的顺序是否重要?
【问题讨论】:
-
您使用的是哪个数据库? ...因为您的问题不是独立于数据库的
-
@scaisEdge 在末尾添加了注释。
-
@DuduMarkovitz 很难听到。为什么听起来那么糟糕? (我的英语不太好,我很难知道我的问题听起来如何)。
-
@Peregring-lk,你的英语很好,但问题太模糊了。它应该像字典定义一样。如果主题中还没有,那么第一行的主要思想应该很清楚。不要讲故事。从主要思想开始,然后使用简单明了的示例进行深入研究。
-
@Peregring-lkq,查看有关 MySQL 的更新答案,但请仔细阅读上一节的末尾
标签: mysql sql sql-order-by query-optimization where