Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Tsql - Fatal编程技术网

Sql server 提高SQL Server查询性能

Sql server 提高SQL Server查询性能,sql-server,tsql,Sql Server,Tsql,我编写了一个查询,其中我创建了一个字符串,并根据条件从表中获取不同的值 这张桌子大约有5000行。执行此查询几乎需要20秒 我相信字符串比较使查询变得如此缓慢。但我想知道我的选择是什么 查询: 一个选项是创建一个计算列并在该列上创建索引 本文对此进行了探讨 您还应该确保联接关系中的每一列都有索引: p1.trafficSerial & p2.trafficSerial P1.sourceTraffic & P2.sourceTraffic P1.sinkTraffic &

我编写了一个查询,其中我创建了一个字符串,并根据条件从表中获取不同的值

这张桌子大约有5000行。执行此查询几乎需要20秒

我相信字符串比较使查询变得如此缓慢。但我想知道我的选择是什么

查询:


一个选项是创建一个计算列并在该列上创建索引

本文对此进行了探讨

您还应该确保联接关系中的每一列都有索引:

p1.trafficSerial & p2.trafficSerial
P1.sourceTraffic & P2.sourceTraffic
P1.sinkTraffic & P2.sinkTraffic
过滤器的列:p1.siteCodeID

此列提供帮助:

如果可以从select语句中删除distinct,则此查询将大大加快速度。很多时候,我通过客户端或系统的web部件处理不同的值,如VisualBasic、php、c等。 请删除distinct关键字,并在至少执行两次后再次执行查询。 但是,如果您无法删除distinct,则只需将其留在那里

这很重要:将聚集索引扫描转换为聚集索引搜索或仅转换为索引搜索。这将大大加快您的查询速度。通过修改索引,可以从索引扫描中获取索引搜索。通常,聚集索引扫描来自对列与聚集索引的比较,聚集索引多次是主键。我怀疑此列是portside.sitecodeid

致以最良好的祝愿


tonci korsano

您的表的结构是什么?定义了哪些索引?在演示示例中,pmId是主键执行计划说明了什么?执行计划是,选择0%不同43%,嵌套循环成本1%,聚集索引扫描13%聚集索引寻道成本43%。示例脚本中不包括@SiteId的定义,但要确保不会发生任何隐式数据类型转换。有时,这可能会导致严重的性能问题。
ALTER TABLE dbo.portList ADD
traffic AS Convert(nvarchar,trafficSerial) +' ('+  sourceTraffic + ' - ' + sinkTraffic + ' )' PERSISTED
GO

CREATE NONCLUSTERED INDEX IX_portList_traffic
ON dbo.portList  (traffic)
GO

select distinct traffic from dbo.portList 
p1.trafficSerial & p2.trafficSerial
P1.sourceTraffic & P2.sourceTraffic
P1.sinkTraffic & P2.sinkTraffic