[英]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.