可查询性与功能的对比,SQL Server

时间:2018-07-06 05:47:23

标签: sql-server performance sql-server-2008 tsql

我一直认为,在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

此处的性能没有差异。我的测试是否有问题?在这种情况下,我对可持久性的理解是否错误?

谢谢。

1 个答案:

答案 0 :(得分:2)

可保存性与数据库使用列索引的能力有关。但是在您的示例中,LastName列没有索引,因此这确实是一个有争议的问题。另外,您测试的数据集非常小,即使LastName确实有索引,SQL Server还是很可能决定不使用该索引。

如果您使用更大的数据集,请在LastName上添加索引,并在索引可以帮助查询的地方添加一些数据,我希望您会有所不同。