我一直认为,在LIKE 'Z%'
子句中使用WHERE
的查询是可查询的,而使用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
此处的性能没有差异。我的测试是否有问题?在这种情况下,我对可持久性的理解是否错误?
谢谢。
答案 0 :(得分:2)
可保存性与数据库使用列索引的能力有关。但是在您的示例中,LastName
列没有索引,因此这确实是一个有争议的问题。另外,您测试的数据集非常小,即使LastName
确实有索引,SQL Server还是很可能决定不使用该索引。
如果您使用更大的数据集,请在LastName
上添加索引,并在索引可以帮助查询的地方添加一些数据,我希望您会有所不同。