小编SWa*_*SWa的帖子

搜索“T”而不是“F”时,相同的查询速度较慢

我有一个旧的数据库使用char(1)'T''F'布尔值。该字段中的唯一值是Tand F,在以下查询中,第一个是瞬时的,第二个需要 30 秒。

select top 50 * from vw_Movement 
where MOVTypeId = 20 and MOVRequiresResolution = 'T' and MOVIsResolved = 'F' 

select top 50 * from vw_Movement 
where MOVTypeId = 20 and MOVRequiresResolution = 'T' and MOVIsResolved = 'T' 
Run Code Online (Sandbox Code Playgroud)

执行计划非常相似,但较慢的使用不同的索引。

修正通过改变SQL的问题:

select top 50 * from vw_Movement 
where MOVTypeId = 20 and MOVRequiresResolution = 'T' and MOVIsResolved <> 'F'  
Run Code Online (Sandbox Code Playgroud)

这使数据库使用与第一个查询相同的索引并立即执行,但我更愿意了解实际发生的情况。我在阅读执行计划方面非常绿色,但是对于可能发生的事情的一些指示将不胜感激。

从阅读周围,似乎中符合条件的会影响性能记录的预期数量,所涉及的表有更多的FT

movisresolved 
------------- ----------- …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2

5
推荐指数
1
解决办法
168
查看次数

标签 统计

sql-server ×1

sql-server-2008-r2 ×1