可优化优化的查询与函数,SQL Server



我一直认为在WHERE子句中使用LIKE 'Z%'的查询是可优化的,而使用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

查询 1:8 秒

SELECT * 
FROM #Person 
WHERE LEFT (Lastname, 1) = 'Z'
GO 100

查询 2:8 秒

SELECT *  
FROM #Person 
WHERE LastName LIKE 'Z%'
GO 100

这里的性能没有区别。在这种情况下,我对可变量性的理解是否错误的测试有问题吗?

提前谢谢。

可优化性与数据库在列上使用索引的能力有关。 但是在您的示例中,LastName列没有索引,因此这确实是一个有争议的问题。 此外,您测试的数据集非常小,即使LastName确实有索引,SQL Server 也可能决定无论如何都不使用该索引。

如果您使用较大的数据集,在LastName上添加索引,并在索引有助于查询的地方添加一些数据,我希望您会看到差异。

相关内容

  • 没有找到相关文章

最新更新