sql-server - Sargable 查询与函数,SQL Server
问题描述
我一直认为LIKE 'Z%'
在WHERE
子句中使用的查询是 sargable,而使用的查询LEFT (ColA, 1) = 'Z'
不是。
所以我做了一个小测试。
CREATE TABLE #Person (ID INT IDENTITY, LastName VARCHAR (50))
CREATE CLUSTERED INDEX i_PersonID ON #Person (ID)
GO
INSERT INTO #Person
VALUES ('Peters'), ('Michaels'), ('Richarson'), ('Stevens'),
('Wade'), ('Zachery')
GO 10000
查询一:8秒
SELECT *
FROM #Person
WHERE LEFT (Lastname, 1) = 'Z'
GO 100
查询 2:8 秒
SELECT *
FROM #Person
WHERE LastName LIKE 'Z%'
GO 100
这里的性能没有区别。在这种情况下,我对 sargability 的理解是否有问题?
提前致谢。
解决方案
Sargability 与数据库在列上使用索引的能力有关。但是在您的示例中,该LastName
列没有索引,因此这确实是一个有争议的问题。此外,您测试的数据集非常小,即使LastName
有索引,SQL Server 也很可能决定不使用该索引。
如果您使用更大的数据集,在 上添加索引LastName
,并在索引有助于查询的地方添加一些数据,我希望您会看到不同。
推荐阅读
- c - 为什么我在 C 中的函数出现“重复符号”错误?
- spring-boot - 尝试使用 GemfireRepository 查找实体时未调用 CacheLoader
- powerbi - powerbi 中使用 summarise() 和 groupby() 计算百分位数
- javascript - 我的 Facebook 像素是异步的还是同步的?
- c++ - C++ 分段错误 (SIGSEGV)
- c++ - 无法从 /dev/input/eventx 读取原始键盘事件
- python - 如何检查 CNN 模型是否正确实现?
- python - AttributeError:'Sequential'对象在python中没有属性'_built'
- c# - += 被认为是一个无效的表达式术语?
- r - 如何减少 RISmed R 包中每秒的 URL 请求量?