Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 可搜索查询与函数,SQL Server_Sql Server_Performance_Sql Server 2008_Tsql - Fatal编程技术网

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秒。此外,在逻辑读取方面也存在重大差异。谢谢