更新:編輯表別名。優化SQL Server 2008查詢
我正在嘗試查找下面的查詢是否可以重寫以提高性能。最近我們開始注意到對查詢的巨大性能影響。人表已接近1000萬,聯繫表有近1700萬 記錄。
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
每個人在聯繫表中可以有一個/多個移動/家庭電話號碼。根據主要聯繫人類型,它應該只根據PrimaryContact
類型獲取一個電話號碼。
在附註中,我們也計劃根據Department
對Person
表進行分區。
任何提高整體性能的建議將不勝感激。
感謝
您所查詢的是被語法正確的,它並沒有什麼意義至今。什麼是「DETAILS」? –
對不起,這是PERSON.PID而不是DETAILS.PID – Sharmi
你看過**查詢的執行計劃**嗎?他們展示了什麼?另外:你的表結構是什麼,已經有了哪些索引? –