Обновление: отредактирован псевдоним таблицы.Оптимизация запроса SQL Server 2008
Я пытаюсь найти, может ли следующий запрос быть переписан для повышения производительности. Недавно мы начали замечать огромное влияние на запрос. Таблица лиц имеет около 10 миллионов, а таблица контактов - около 17 миллионов записей.
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
.
На боковой ноте мы также планируем разбить таблицу Person
на основе Department
.
Любые предложения по улучшению общей производительности будут высоко оценены.
Благодаря
Ваш запрос настолько далек от синтаксически правилен, что это не имеет смысла. Что такое '' DETAILS'? –
К сожалению, это PERSON.PID вместо DETAILS.PID – Sharmi
Вы просмотрели ** планы выполнения ** для этого запроса? Что они показывают? Также: каковы ваши структуры таблиц и какие индексы уже существуют? –