【发布时间】:2011-05-03 01:08:48
【问题描述】:
我正在创建基于某些 nvarchar 列的第一个字母的结果分页,而不是通常的结果分页,通常按结果数分页。
我没有遇到过是否使用LIKE 运算符或相等 (=) 运算符过滤结果的挑战。
select *
from table
where name like @firstletter + '%'
对比
select *
from table
where left(name, 1) = @firstletter
我已经尝试在网上搜索两者之间的速度比较,但很难找到任何结果,因为大多数搜索结果与LEFT JOINs而不是LEFT函数有关。
【问题讨论】:
-
您是否查看过两者的查询计划?您是否运行过自己的基准测试?
-
不,我没有。我想我不是第一个问自己这个问题的人,所以我认为其他人可能已经测试过了。由于 LEFT 主要与连接有关,我似乎无法找到这些数据。因此,如果有人在某处有链接的问题。我怀疑 LEFT 应该更快
-
第一个(使用
LIKE)有机会在name上使用索引,而第二个(针对列值的函数)没有。 -
@MarcusAdams 是正确的。当使用任何函数如LEFT、SUBSTRING等时,服务器不能使用索引。
-
谢谢。不知道。
标签: tsql comparison sql-like