Лучшая стратегия соединения / индексы для SQL Server - PullRequest
0 голосов
/ 06 декабря 2018

Какова наилучшая стратегия / индексы объединения для этого запроса:

SELECT 
    kwk.*, an.AuftragDatum, an.AbgabeDatum, an.BezahltDatum, an.AuftragStatus 
FROM 
    KundenWerbenKunden kwk
INNER JOIN 
    Auftrag an ON an.AuftragNummer = kwk.AuftragNummer
WHERE 
    kwk.Deleted = 0

Таблица KundenWerbenKunden имеет 103950 строк с 103646 Deleted = 0.

Таблица Auftrag имеет 3826552строки.

В моем реальном запросе я делаю еще несколько соединений:

INNER JOIN 
    Filiale fn WITH (NOLOCK) ON an.FilialeID = fn.FilialeID 
INNER JOIN 
    Kunde kn ON an.KundeID = kn.KundeID 
OUTER APPLY 
    (SELECT DISTINCT KSKNr 
     FROM KdZuordnung 
     WHERE KundeID = kn.KundeID) zn 
LEFT JOIN 
    Anrede ann WITH (NOLOCK) ON kn.Anrede = ann.Anrede 
INNER JOIN 
    AuftragArt aa WITH (NOLOCK) ON an.AuftragArtID = aa.AuftragArtID 
INNER JOIN 
    AuftragGrund ag WITH (NOLOCK) ON an.AuftragGrundID = ag.AuftragGrundID 
INNER JOIN 
    AuftragType at WITH (NOLOCK) ON an.AuftragTypeID = at.AuftragTypeID 

1 Ответ

0 голосов
/ 06 декабря 2018

Для этого запроса:

SELECT *
FROM KundenWerbenKunden kwk INNER JOIN
     Auftrag an
     ON an.AuftragNummer = kwk.AuftragNummer
WHERE kwk.Geloescht = 0;

И не зная ничего о распределении Geloescht, я бы сначала попробовал индексы на KundenWerbenKunden(Geloescht, AuftragNummer) и Auftrag(AuftragNummer).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...