小编sto*_*roz的帖子

添加通配符(或顶部)时 SQL Server 查询速度大幅减慢

我有一个由 2000 万只动物组成的动物园,我在 SQL Server 2005 数据库中对其进行跟踪。其中约 1% 是黑色,约 1% 是天鹅。我想获得所有黑天鹅的详细信息,因此不想淹没我所做的结果页面:

select top 10 * 
from animal 
where colour like 'black'  
and species like 'swan'
Run Code Online (Sandbox Code Playgroud)

(是的,不明智的是,这些字段是自由文本,但它们都已编入索引)。事实证明我们没有这样的动物,因为查询在大约 300 毫秒内返回一个空集。如果我使用 '=' 而不是 'like',它的速度会快两倍,但我有一种预感,后者将为我节省一些打字的时间。

原来动物园管理员认为他可能将一些天鹅输入为“黑色”,因此我相应地修改了查询:

select top 10 * 
from animal  
where colour like 'black%' 
and species like 'swan'
Run Code Online (Sandbox Code Playgroud)

结果证明它们都没有(实际上除了“黑色”动物之外没有“黑色%”动物)但查询现在需要大约 30 秒才能返回空。

似乎只是 'top' 和 'like %' 的组合引起了麻烦,因为

select count(*) 
from animal  
where colour like 'black%' 
and species like 'swan'
Run Code Online (Sandbox Code Playgroud)

返回 0 非常快,甚至

select * 
from animal 
where colour like 'black%' 
and species …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server

52
推荐指数
2
解决办法
3885
查看次数

标签 统计

sql-server ×1

sql-server-2005 ×1