Query中的执行顺序如下:
SELECT * FROM [users] WHERE [userid] = 50001 AND [username] = 'new user'
我的问题是首先匹配的内容 - [userid]或[username]。
因此会影响执行时间。
任何改进此查询的建议都将受到关注。
答案 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(至少还有很多其他的)也非常聪明,可以知道执行过滤器的顺序来优化查询。
出于您的目的,它无关紧要,执行结果将完全相同,具有相同的性能,无论是哪种顺序。