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建议我在执行计划顶部创建哪些索引,但在检查此查询的执行计划时没有此类建议
是什么导致查询速度如此之慢?我该怎么做才能让它再次工作
提前谢谢
我已经按照执行计划解决了这个问题,并看到
散列匹配占20%,而索引扫描占14%
我在正在扫描索引的表上创建了一个索引,立即查询速度加快了
CREATE NONCLUSTERED INDEX IND_POPRECORD ON POP30310(PORCTNM)
您可能需要创建一些索引…在选择“包含实际执行计划”选项的情况下重新运行您的查询,并查看它“遭受”的位置在我编辑问题之前您必须已发表评论:)。我已经运行了执行计划,但是没有关于新索引的建议。总共有多少行?您可能已经达到服务器的内存限制-它可能正在交换到磁盘,因此会出现性能问题(以及任何更改都会极大地影响性能的事实)。查询只返回6263行,sql server上有64GB内存。您是否显式重新编译视图和查询?“按照执行计划”,您使用哪种软件创建该图表以及如何计算百分比?“遵循执行计划”,您使用哪种软件创建该图表以及如何计算百分比?这是SQL Server Management Studio 2008生成的执行计划