WHERE子句中的SQL Query执行顺序

时间:2011-12-31 04:33:39

标签: sql

Query中的执行顺序如下:

SELECT * FROM [users] WHERE [userid] = 50001 AND [username] = 'new user'

我的问题是首先匹配的内容 - [userid]或[username]。

因此会影响执行时间。

任何改进此查询的建议都将受到关注。

3 个答案:

答案 0 :(得分:7)

答案取决于您为SQL引擎提供的索引。如果userid已编入索引但username未编入索引,则引擎可能userid开头;如果username已编入索引但userid未编入索引,则引擎可能以名称开头;如果两个字段都已编制索引,则引擎将搜索该索引,并按内部ID查找行。请注意,所有这些都高度依赖于您使用的RDBMS。当行数较少时,某些引擎会完全放弃索引搜索以支持全表扫描。

答案 1 :(得分:2)

数据库将决定执行条件的顺序。

通常(但不总是)它会尽可能先使用索引。

您可以看到需要优化的位置或连接的条件: - SQLStatementExecution - Example Discussion1 - Example Discussion2 - Example Discussion3

一般来说,在创建执行计划之前,查询优化器会评估和优化WHERE子句中的条件顺序。这很好。但是,我建议您在将每个查询投入生产之前查看查询执行计划。

答案 2 :(得分:1)

基于SQL的数据库引擎通常会根据群集(数据记录的物理顺序)和任何可用索引进行优化。 MySQL和MS SQL Server(至少还有很多其他的)也非常聪明,可以知道执行过滤器的顺序来优化查询。

出于您的目的,它无关紧要,执行结果将完全相同,具有相同的性能,无论是哪种顺序。