SQL - WHERE条件的顺序是否重要?

pow*_*boy 54 sql

假设这category_id是表的索引键(不是主键)books.以下两个SQL语句之间有什么区别吗?

SELECT * FROM books WHERE author='Bill' AND category_id=1

SELECT * FROM books WHERE category_id=1 AND author='Bill'
Run Code Online (Sandbox Code Playgroud)

我想首先过滤记录category_id然后再author过滤比以相反顺序过滤它们更快.SQL引擎是否足够智能以这种方式实现?

OMG*_*ies 47

不,WHERE子句的顺序无关紧要.

优化程序检查查询并确定基于索引等获取数据的最佳方法.即使category_id和author列上有覆盖索引 - 要么满足使用它的条件(假设没有更好的东西).

  • @AndrewHeath:据我所知,这适用于数据库(缺少 NoSQL 变体) (2认同)

gbn*_*gbn 9

SQL是声明性的.

在你的例子中,你已经告诉引擎/优化器你想要什么......它现在将找出最好的方法(在合理范围内和"成本",这将是偏离主题).

  • +1表示真实陈述.也就是说,Prolog是声明性的(至少在我使用过的实现中)条件的顺序很重要. (5认同)

Dea*_*n J 7

而一般来说,不,这假设您使用的是现代数据库。也许十年前,那时肯定很重要。

  • +1 表示较旧的 RDBMS 系统可能没有此功能。 (3认同)