Update: bearbeitet den Tabellenalias.Optimieren Sie SQL Server 2008 Abfrage
Ich versuche zu finden, ob die folgende Abfrage neu geschrieben werden kann, um die Leistung zu verbessern. Wir haben in letzter Zeit festgestellt, dass sich die Abfrage sehr stark auf die Leistung auswirkt. Person Tabelle hat fast 10 Millionen und Kontakt Tabelle hat fast 17 Millionen Datensätze.
SELECT
ID, NAME, DEPARTMENT,
CASE
WHEN PrimaryContact = 'MOBILE'
THEN (SELECT TOP 1 MOBILE
FROM CONTACT
WHERE ContactType = 'MOBILE' AND CONTACT.PID = PERSON.PID)
ELSE (SELECT TOP 1 HOME
FROM CONTACT
WHERE CONTACTTYPE = 'HOME' AND CONTACT.PID = PERSON.PID),
FROM
PERSON
WHERE
DEPARTMENT = @DEPARTMENT
Jede Person kann in der Kontakttabelle eine/mehrere Mobile/Home-Telefonnummern haben. Basierend auf dem primären Kontakttyp sollte nur eine Telefonnummer basierend auf dem Typ PrimaryContact
abgerufen werden.
Nebenbei planen wir auch die Person
Tabelle basierend auf Department
zu partitionieren.
Alle Vorschläge zur Verbesserung der Gesamtleistung werden sehr geschätzt.
Dank
Ihre Anfrage ist so weit von syntaktisch korrekt sein, dass es nicht sinnvoll ist. Was ist "DETAILS"? –
Entschuldigung, das ist PERSON.PID anstelle von DETAILS.PID – Sharmi
Haben Sie sich die ** Ausführungspläne ** für diese Abfrage angesehen? Was zeigen sie? Außerdem: Was sind Ihre Tabellenstrukturen und welche Indizes sind bereits vorhanden? –