ich mit dieser Abfrage eine Frage haben:Unterschiedliche Ausführungsplan aus derselben Abfrage in verschiedenen SQL Server
select distinct
Date_Int,
CodF,
Desc_Com,
DataDesc_Com,
CodC,
Function,
Tratt_Number,
Tratt_State
from
tmp_SIC_Trattative_Stato_com_l2
UNION
SELECT DISTINCT
case
when (ts.Date_Int is not null)
then ts.Date_Int
else All_Day.Date_Int
end as Date_Int,
case
when (ts.CodF is not null)
then ts.CodF
else All_Day.CodF
end as CodF,
case
when (ts.Desc_Com is not null)
then ts.Desc_Com
else All_Day.Desc_Com
end as Desc_Com,
case
when (ts.DataDesc_Com is not null)
then ts.DataDesc_Com
else All_Day.DataDesc_Com
end as DataDesc_Com,
case
when (ts.CodC is not null)
then ts.CodC
else All_Day.CodC
end as CodC,
case when (ts.Function is not null) then ts.Function else All_Day.Function end as Function,
case when (ts.Tratt_Number is not null) then ts.Tratt_Number else All_Day.Tratt_Number end as Tratt_Number,
case when (ts.Tratt_State is not null) then ts.Tratt_State else All_Day.Tratt_State end as Tratt_State
FROM
Commerciali_All_Day as All_Day
LEFT OUTER JOIN
tmp_SIC_Trattative_Stato_com_l2 as ts ON ts.Date_Int = All_Day.Date_Int
AND ts.CodF = All_Day.CodF
AND ts.Desc_Com = All_Day.Desc_Com
AND ts.DataDesc_Com = All_Day.DataDesc_Com
AND ts.CodC = All_Day.CodC
AND ts.Function = All_Day.Function
AND ts.Tratt_State = All_Day.Tratt_State
WHERE
ts.Date_Int IS NULL
ich diese Abfrage in einer gespeicherten Prozedur ausführen, aber die Ausführungsplan ändert sich, wenn die gespeicherte Prozedur Produktion mit ausgeführt wird SQL Server oder mit Test SQL Server.
Dies ist der Testausführungsplan:
Und dies ist die Produktion Ausführungsplan:
Die Quelltabelle und die gespeicherte Prozedur die gleichen in Test und Produktion und ich verstehe nicht, weil der Ausführungsplan und die Zeit unterschiedlich sind.
In Test ist die Abfrage in 6 Minuten ausführen und in 15 Minuten in der Produktion.
Der Test und Produktion SQL Server sind Microsoft SQL Server 2014-Version 12.0.4100.1.
- Der Produktionsserver verfügt über 24 GB RAM und 8 CPU 2GHz
- Der Testserver verfügt über 16 GB RAM und und 4 CPU mit 2 GHz
Ich verstehe nicht, warum das Verfahren besser in Test durchführt, Umwelt und nicht in der Produktionsumgebung.
Der Plan ist eigentlich der gleiche, die Kosten sind unterschiedlich. Wenn Sie die Pläne als XML bereitstellen könnten, können Sie bessere Antworten erhalten. Insbesondere, wenn Sie den Mauszeiger über die Sortier- und Hash-Übereinstimmung/Verknüpfung bewegen, werden die Felder (die wahrscheinlich gleich sind) sowie die Anzahl der beteiligten Datensätze eingeschlossen. –
Es ist nicht nötig, 'SELECT DISTINCT' zu wählen, wenn' UNION', da 'UNION' alle Duplikate entfernt. ("UNION" ist eigentlich die Kurzform von "UNION DISTINCT".) – jarlh
Sind die Inhalte der Tabellen in Test und Produktion identisch? Die Anzahl der Zeilen in einer Tabelle kann sich auf den Plan auswirken. – hatchet