小编Gar*_*rom的帖子

完全相同的查询 - 不同的性能

数据库:SQL Server 12.0.5207

除了过滤条件之一的值外,我有几个查询在所有方面都完全相同。同一张表(不是另一台服务器上的模式副本),因此索引、资源等都是相同的。一切都是完全相同的。

此查询在一秒钟内运行:

SELECT 
         MAX(MessageID) AS [MaxID]
FROM BoothComm.UniversalMessageQueue
WHERE 
       MessagePlatform = 'linux'
Run Code Online (Sandbox Code Playgroud)

此查询在一秒钟内运行:

SELECT 
         MAX(MessageID) AS [MaxID]
FROM BoothComm.UniversalMessageQueue
WHERE 
       MessagePlatform = 'linux'
       AND
       MessageCategory = 'accounting'
Run Code Online (Sandbox Code Playgroud)

此查询在一秒钟内运行:

SELECT 
         MAX(MessageID) AS [MaxID]
FROM BoothComm.UniversalMessageQueue
WHERE 
       MessagePlatform = 'windows'
Run Code Online (Sandbox Code Playgroud)

那么为什么这个运行需要将近 30 秒呢?

SELECT 
         MAX(MessageID) AS [MaxID]
FROM BoothComm.UniversalMessageQueue
WHERE 
       MessagePlatform = 'windows'
       AND
       MessageCategory = 'accounting'
Run Code Online (Sandbox Code Playgroud)

我的一个同事在表中添加了另一个索引,解决了延迟的业务问题。该索引将 30 秒减少到 FULL 秒,同时将其他查询加速到瞬时。同样,执行计划完全相同

(索引扫描应为 100%)。我听取了其他论坛的建议,并确保查询中的列顺序与它们存储在索引中的顺序相匹配...

CREATE NONCLUSTERED INDEX [MessageID and Platform and Category] ON [BoothComm].[UniversalMessageQueue]
( …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2014 query-performance

4
推荐指数
2
解决办法
3589
查看次数