繁体   English   中英

WHERE子句中的SQL Query执行顺序

[英]SQL Query execution sequence in WHERE clause

Query中的执行顺序如下:

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

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

因此会影响执行时间。

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

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

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

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

您可以看到需要优化where或join的条件: - SQLStatementExecution - Example Discussion1 - Example Discussion2 - Example Discussion3

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM