Sql server 可搜索查询与函数,SQL Server
我一直认为在Sql server 可搜索查询与函数,SQL Server,sql-server,performance,sql-server-2008,tsql,Sql Server,Performance,Sql Server 2008,Tsql,我一直认为在WHERE子句中使用的查询(如“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'), ('Richarso
WHERE
子句中使用的查询(如“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
SELECT *
FROM #Person
WHERE LastName LIKE 'Z%'
GO 100
查询2:8秒
SELECT *
FROM #Person
WHERE LEFT (Lastname, 1) = 'Z'
GO 100
SELECT *
FROM #Person
WHERE LastName LIKE 'Z%'
GO 100
这里的性能没有差别。我的测试有什么问题吗?在这种情况下,我对sargability的理解有错误吗
提前感谢。可搜索性与数据库对列使用索引的能力有关。但在您的示例中,LastName
列没有索引,因此这是一个没有实际意义的问题。此外,您的测试数据集非常小,即使LastName
确实有索引,SQL Server也可能决定不使用该索引
如果使用较大的数据集,在LastName
上添加索引,并在索引有助于查询的位置添加一些数据,我希望您会看到不同之处。可搜索性与数据库在列上使用索引的能力有关。但在您的示例中,LastName
列没有索引,因此这是一个没有实际意义的问题。此外,您的测试数据集非常小,即使LastName
确实有索引,SQL Server也可能决定不使用该索引
如果您使用更大的数据集,在LastName
上添加索引,并在索引有助于查询的地方添加一些数据,我希望您会看到不同。谢谢@Tim,我将运行一些新测试并在name列上添加索引。将表大小调整为600k行,并添加了非聚集索引。第一个查询运行了20秒,第二个查询运行了5秒。此外,在逻辑读取方面也存在重大差异。谢谢谢谢@Tim,我将运行一些新的测试,并在name列上添加一个索引。将表大小调整为600k行,并添加一个非聚集索引。第一个查询运行了20秒,第二个查询运行了5秒。此外,在逻辑读取方面也存在重大差异。谢谢