Производительность для Avg & Max в SQL - PullRequest
0 голосов
/ 18 июня 2019

Я хочу уменьшить время выполнения запроса для следующего запроса. Этот запрос занимает около 1 минуты 20 секунд для записи около 2 тыс.

Количество записей в таблице: 1348474

Количество записей, обработанных через запрос: 25000

Количество возвращенных записей: 2152

SELECT Col1, Col2,
ISNULL(AVG(Col3),0) AS AvgCol,
ISNULL(MAX(Col3),0) AS MaxCol,
COUNT(*) AS Col5
FROM TableName WITH(NOLOCK)
GROUP BY Col1, Col2
ORDER BY Col1, MaxCol DESC

Я попытался удалить столбцы AVG и MAX, и он снизился до 1 секунды. Есть ли оптимизированное решение для того же? У меня нет другой индексации, кроме первичного ключа.

Обновление

Добавлены индексы: некластеризованный расположенный на ПЕРВИЧНОМ - Col1

некластеризованный, расположенный на PRIMARY - Col2

кластерный, уникальный первичный ключ, расположенный на PRIMARY - Id

======

Заранее спасибо .. Счастливое кодирование !!!

1 Ответ

1 голос
/ 18 июня 2019

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

SELECT Col1, Col2,
       COALESCE(AVG(Col3), 0) AS AvgCol,
       COALESCE(MAX(Col3), 0) AS MaxCol,
       COUNT(*) AS Col5
FROM TableName
GROUP BY Col1, Col2
ORDER BY Col1, MaxCol DESC;

Я бы начал с индекса на (Col1, Col2, Col3).

Я не уверен, поможет ли это.Возможно, проблема заключается в том, чтобы упорядочить результаты.

...