假设这category_id
是table的索引键(不是主键)books
。以下两个SQL语句之间有什么区别?
SELECT * FROM books WHERE author='Bill' AND category_id=1
SELECT * FROM books WHERE category_id=1 AND author='Bill'
我猜首先过滤记录category_id
然后再author
过滤比以相反顺序过滤记录要快。SQL引擎足够聪明地做到这一点吗?
假设这category_id
是table的索引键(不是主键)books
。以下两个SQL语句之间有什么区别?
SELECT * FROM books WHERE author='Bill' AND category_id=1
SELECT * FROM books WHERE category_id=1 AND author='Bill'
我猜首先过滤记录category_id
然后再author
过滤比以相反顺序过滤记录要快。SQL引擎足够聪明地做到这一点吗?
Answers:
不,WHERE子句的顺序无关紧要。
优化器检查查询并根据索引等确定获取数据的最佳方法。即使category_id和author列上有覆盖索引-两者都将满足使用它的条件(假设没有更好的条件)。
SQL是声明性的。
在您的示例中,您已经告诉引擎/优化器您想要什么...它现在将成为实现此目标的最佳方法(在合理的范围内,“成本”将不在主题之内)。
通常,不,这假设您使用的是现代数据库。也许十年前,那当然很重要。