以下查询需要3个小时。表LAR_PRODUCTS和STORE_RANGE_GRP_MATCH是物理表。
行:
SQL:
Select 1
From
LAR_PRODUCTS prd with (nolock)
Join
STORE_RANGE_GRP_MATCH srg with (nolock)
On prd.Store_Range_Grp_Id = srg.Orig_Store_Range_Grp_ID
And srg.Match_Flag = 'Y'
And prd.Range_Event_Id = srg.LAR_Range_Event_Id
Where
srg.Range_Event_Id Not IN (Select Range_Event_Id
From Last_Authorised_Range)
当前索引是
Create Clustered Index Idx_tmpSTORE_RANGE_GRP_MATCH
ON STORE_RANGE_GRP_MATCH (LAR_Range_Event_Id, Orig_Store_Range_Grp_ID)
答案 0 :(得分:0)
首先,您可以将NOT IN
子句替换为LEFT JOIN
,如下所示:
SELECT 1
FROM LAR_PRODUCTS prd WITH (nolock)
JOIN STORE_RANGE_GRP_MATCH srg WITH (nolock)
ON prd.Store_Range_Grp_Id = srg.Orig_Store_Range_Grp_ID
AND srg.Match_Flag = 'Y'
AND prd.Range_Event_Id = srg.LAR_Range_Event_Id
LEFT JOIN Last_Authorised_Range lar
ON srg.Range_Event_Id = lar.Range_Event_Id
WHERE lar.Range_Event_Id IS NULL
接下来,在查询中涉及的每一列上创建一些索引都不会有什么坏处,所以加快它们之间的任何比较。
STORE_RANGE_GRP_MATCH上的索引(由用户 TT。友好建议)
创建NONCLUSTERED INDEX STORE_RANGE_GRP_MATCH_idx1 ON STORE_RANGE_GRP_MATCH(Orig_Store_Range_Grp_ID,LAR_Range_Event_Id,Match_Flag);
LAR_PRODUCTS索引:
CREATE NONCLUSTERED INDEX LAR_PRODUCTS_idx1 ON LAR_PRODUCTS(Store_Range_Grp_Id,Range_Event_Id);
希望这有帮助!
答案 1 :(得分:0)
您可能缺少加快查询速度的索引。想到的一个候选INDEX是:
CREATE NONCLUSTERED INDEX srg_id_event_flag ON STORE_RANGE_GRP_MATCH(Orig_Store_Range_Grp_ID,LAR_Range_Event_Id,Match_Flag);
执行该语句,然后再次运行查询。它可能会提高性能。