使用并集优化查询

问题描述 投票:0回答:1

我必须优化以下查询,执行时间太长

SELECT Devis.Numero_Devis, 
       contrat.Numero_contrat, 
       Devis.Id_Devis, 
       contrat.ID_contrat 
FROM   (SELECT ID_contrat          AS Id_Devis, 
               Numero_contrat AS Numero_Devis 
        FROM   [sch_DM_LMI].Fact_IU_contrat AS contrat 
        WHERE  ( Code_Statut_Contrat = 'D' )) AS Devis 
       LEFT OUTER JOIN [sch_DM_LMI].Fact_IU_contrat AS contrat 
                    ON Devis.Numero_Devis = contrat.Numero_contrat 
                       contratD contrat.Code_Statut_Contrat = '1' 
UNION 
SELECT 'Inconnu'                              AS Numero_Devis, 
       'Inconnu'                              AS Numero_contrat, 
       '00000000-0000-0000-0000-000000000000' AS Id_Devis, 
       '00000000-0000-0000-0000-000000000000' AS ID_contrat 

我创建了以下索引

CREATE NONCLUSTERED INDEX idx_Devis
ON [sch_DM_LMI].[Fact_IU_contrat] ([Code_Statut_Contrat])
INCLUDE ([ID_contrat],[Numero_contrat])

这里是执行计划:

enter image description here如何优化?

sql tsql sql-server-2016
1个回答
0
投票
这里唯一重要的更改是对UNION ALL的更改。

然后针对该查询,您想要Fact_IU_contrat(Code_Statut_Contrat, Numero_contrat)Fact_IU_contrat(Numero_contrat, Code_Statut_Contrat)上的索引-是的,都是。您还可以在两个索引中都包含id_contrat

© www.soinside.com 2019 - 2024. All rights reserved.