SQL – WHERE条件的顺序是否重要?
假设category_id
是表books
的索引键(不是主键)。 以下两个SQL语句有什么不同?
SELECT * FROM books WHERE author='Bill' AND category_id=1 SELECT * FROM books WHERE category_id=1 AND author='Bill'
我猜首先通过category_id
筛选logging,然后由author
筛选logging比按相反顺序筛选logging更快。 SQL引擎是否足够聪明地这样做?
不,WHERE子句的顺序无关紧要。
优化器检查查询并确定基于索引等获取数据的最佳方法。 即使在category_id和author列上有一个覆盖索引 – 要么满足使用它的标准(假设没有更好的东西)。
SQL是声明式的 。
在你的例子中,你已经告诉引擎/优化器你想要什么…现在将找出最好的方法来做到这一点(在理性和“成本”这将是脱离主题)。
简而言之,不,它们并不重要,因为优化器将确定获取数据的最佳方法。
而一般来说,不,假设你正在使用现代数据库。 也许十年前,这当然是重要的。