【发布时间】:2018-10-05 07:50:18
【问题描述】:
我在获取以下查询的完整结果集时遇到问题。当我选择不同的前 10000 名时,我会在几秒钟内得到结果。当我把它拿出来时,它会持续运行 1 个多小时。我检查并尝试索引诸如 company reg num + country inc 之类的字段,但没有区别。 Toad 建议添加以下索引:
USE [BW_DCF];
GO
CREATE NONCLUSTERED INDEX [idx_Nonclustered_WeccoParty_OverallStatus]
ON [CORE].[WeccoParty]
([OverallStatus])
INCLUDE (
[GtId], [CrmPartyId], [FirstName], [LastName], [LegalName], [CountryInc],
[BusinessClass], [RmFullName], [PbeFullName], [OverallClientStatus],
[OverallRpStatus], [CompanyRegNum]
)
WITH
(
PAD_INDEX = OFF,
FILLFACTOR = 100,
IGNORE_DUP_KEY = OFF,
STATISTICS_NORECOMPUTE = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON,
DATA_COMPRESSION = NONE
)
ON [BW_DCF_Group1];
GO
select distinct wp1.GtId,
wp1.CrmPartyId,
wp1.LegalName,
wp1.BusinessClass,
wp1.RmFullName,
wp1.PbeFullName,
wp1.OverallClientStatus,
wp1.OverallRpStatus,
wp1.FirstName,
wp1.LastName,
wp1.LegalName,
wp1.CountryInc,
wp1.CompanyRegNum,
wp2.GtId,
wp2.CrmPartyId,
wp2.LegalName,
wp2.BusinessClass,
wp2.RmFullName,
wp2.PbeFullName,
wp2.OverallClientStatus,
wp2.OverallRpStatus,
wp2.FirstName,
wp2.LastName,
wp2.LegalName,
wp2.CountryInc,
wp2.CompanyRegNum
from CORE.WeccoParty wp1
join CORE.WeccoParty wp2 on wp1.CompanyRegNum = wp2.CompanyRegNum
and wp1.CountryInc = wp2.CountryInc
and wp1.GtId <> wp2.GtId
and wp1.OverallStatus = 'Onboarded'
and wp2.OverallStatus = 'Onboarded'
【问题讨论】:
-
可以添加执行计划吗?
-
是的,我现在添加了
-
如果
wp1.GtId <> wp2.GtId是违规者,我不会感到惊讶。您可以发布 DDL 和您的表上的任何索引吗?对于计划,请使用Paste The Plan,图片没有帮助。 -
不过,看看那张图片,所有这些都是聚集索引扫描(不是搜索)。我不知道你的表中有多少行,但我怀疑有很多。因此,SQL Server 正在检查 每一 行的值,它没有使用索引来使事情变得更容易。良好的索引可能会有所帮助。
标签: sql sql-server sqlperformance