假设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
过滤记录,然后按author
过滤记录比按相反顺序过滤记录要快。 SQL引擎是否足够智能以这种方式实现?
答案 0 :(得分:37)
不,WHERE子句的顺序无关紧要。
优化程序会查看查询&确定基于索引等获取数据的最佳方法。即使category_id和author列上有覆盖索引 - 要么满足使用它的条件(假设没有更好的东西)。
答案 1 :(得分:9)
SQL是declarative。
在你的例子中,你已经告诉了引擎/优化器你想要什么......现在它将找到最好的方法(在合理范围内和“成本”,这将是主题)。
答案 2 :(得分:4)
而一般而言,不,假设您使用的是现代数据库。也许十年前,它当然很重要。
答案 3 :(得分:2)
简而言之,不,它们并不重要,因为优化器将确定获取数据的最佳方法。
答案 4 :(得分:0)