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是声明式的 。

在你的例子中,你已经告诉引擎/优化器你想要什么…现在将找出最好的方法来做到这一点(在理性和“成本”这将是脱离主题)。

简而言之,不,它们并不重要,因为优化器将确定获取数据的最佳方法。

而一般来说,不,假设你正在使用现代数据库。 也许十年前,这当然是重要的。