更新:编辑表别名。优化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
你看过**查询的执行计划**吗?他们展示了什么?另外:你的表结构是什么,已经有了哪些索引? –