Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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 连接速度因何处条件而减慢_Sql_Sql Server_Performance_Indexing_Database Performance - Fatal编程技术网

Sql 连接速度因何处条件而减慢

Sql 连接速度因何处条件而减慢,sql,sql-server,performance,indexing,database-performance,Sql,Sql Server,Performance,Indexing,Database Performance,我们的一个观点通常很快,从昨天中午开始就要花很长时间。未更改任何内容,但现在需要几分钟才能运行 SELECT T1.ITEMNO, ROUND(SUM(T3.TOTAL * V1.USDCOST), 3) USDTOTALCOST, ROUND(SUM(T3.TOTAL * V1.GBPCOST), 3) GBPTOTALCOST, SUM(T3.TOTAL) AS TOTALCOMPONENTS FROM TABLE1 T1 WITH (NOLOCK)

我们的一个观点通常很快,从昨天中午开始就要花很长时间。未更改任何内容,但现在需要几分钟才能运行

SELECT 
    T1.ITEMNO,
    ROUND(SUM(T3.TOTAL * V1.USDCOST), 3) USDTOTALCOST,
    ROUND(SUM(T3.TOTAL * V1.GBPCOST), 3) GBPTOTALCOST,
    SUM(T3.TOTAL) AS TOTALCOMPONENTS
FROM
    TABLE1 T1 WITH (NOLOCK)
    INNER JOIN TABLE2 T2 WITH (NOLOCK) ON T1.RECORD_ID = T2.RECORD_ID
    INNER JOIN TABLE3 T3 WITH (NOLOCK) ON T1.RECORD_ID = T3.RECORD_ID AND T2.LINENO = T3.LINENO
    INNER JOIN VIEW1 V1 ON T2.COMPONENTNO = V1.ITEMNO
WHERE
    T2.COMPONENTNO <> '' AND T1.WINDOW_ID = 'COMPONENTS'
GROUP BY T1.ITEMNO
选择
T1.1项目编号,
四舍五入(总计(T3.TOTAL*V1.USDCOST),3)USDTOTALCOST,
四舍五入(总和(T3.TOTAL*V1.Gb成本),3)GbTotalCost,
总计(T3.总计)作为总计组件
从…起
表1 T1(无锁)
将表2 T2与T1上的(NOLOCK)进行内部连接。记录\u ID=T2.RECORD\u ID
将表3 T3与T1上的(NOLOCK)进行内部连接。记录ID=T3.RECORD\U ID和T2.LINENO=T3.LINENO
T2上的内部联接视图1 V1.COMPONENTNO=V1.ITEMNO
哪里
T2.COMPONENTNO“”和T1.WINDOW_ID='COMPONENTS'
按T1.ITEMNO分组
现在,如果我删除计算的
USDTOTALCOST
GBPTOTALCOST
列,那么查询运行得非常快。另外,如果我删除条件
T1.WINDOW\u ID='COMPONENTS'
,那么这也大大提高了查询速度

VIEW1
本身运行速度也非常快,它似乎只是在加入视图时导致该视图速度减慢,并且没有强加
T1.WINDOW\u ID='COMPONENTS'
条件

我被卡住了-我不再知道在哪里检查,以尝试在合理的时间内运行此查询。我通常会检查SSMS建议我在执行计划顶部创建哪些索引,但在检查此查询的执行计划时没有此类建议

是什么导致查询速度如此之慢?我该怎么做才能让它再次工作

提前谢谢

  • 如果可能,在视图上创建索引,并在查询中与(noexpand)提示一起使用。这将提高视图性能

  • 在表1上创建一个具有T1.WINDOW_ID='COMPONENTS'的筛选器索引


  • 我已经按照执行计划解决了这个问题,并看到
    散列匹配占20%,而
    索引扫描占14%

    我在正在扫描索引的表上创建了一个索引,立即查询速度加快了

    CREATE NONCLUSTERED INDEX IND_POPRECORD ON POP30310(PORCTNM)
    

    您可能需要创建一些索引…在选择“包含实际执行计划”选项的情况下重新运行您的查询,并查看它“遭受”的位置在我编辑问题之前您必须已发表评论:)。我已经运行了执行计划,但是没有关于新索引的建议。总共有多少行?您可能已经达到服务器的内存限制-它可能正在交换到磁盘,因此会出现性能问题(以及任何更改都会极大地影响性能的事实)。查询只返回6263行,sql server上有64GB内存。您是否显式重新编译视图和查询?“按照执行计划”,您使用哪种软件创建该图表以及如何计算百分比?“遵循执行计划”,您使用哪种软件创建该图表以及如何计算百分比?这是SQL Server Management Studio 2008生成的执行计划