我在处理SQLServer2012查询时面临一个问题:运行查询时,只为一个部分返回10行
它需要50秒,我试图运行它在另一个时间可能是电脑有更多的负载
但只为一个零件返回10行需要50秒的时间。
50秒,10排,这是更多
我有10000个零件和记录相关的1500万,所以我需要提高性能是最好的
那么我该怎么做才能让查询在短时间内运行呢
我的问题是:
执行计划如下:
https://www.brentozar.com/pastetheplan/?id=HyclwfSev
我试图通过以下方式解决问题:
CREATE NONCLUSTERED INDEX index1
ON [dbo].[Excel_DK] ([PartNumber]) INCLUDE ([ZPartId],[FeatureName],[Value])
但返回10行需要25秒,甚至更多
有什么办法可以提高绩效吗
1条答案
按热度按时间kx5bkwkv1#
从执行计划来看,临时表中的数据似乎是关于
~ 400 000
排。最近,由于过滤(使用INNER JOIN
以及WHERE
子句)数据流减少到10
排。临时的table本身,似乎相当大
Estimate data size
是1 MB
,但实际情况是28 MB
.在下一个屏幕截图上可以很容易地看到以上内容(检查每个块后面的行):
因此,您可以做的是在临时表中创建较小的版本,并预先应用筛选。例如:
然后更换
#TEMP
在原始查询中。当然,您可以尝试另一种筛选,但其思想是提前限制行,而不是从其他表中读取数据。