dinesh42 Ответов: 3

Повышение производительности для отдельного предложения


У меня есть таблица с 2 миллионами записей и 6 столбцами в таблице. Я выполняю нижеприведенное заявление об этом:

SELECT DISTINCT t1.ID
FROM CUSTOMER_ORDER t1
WHERE (t1.SERVER_NAME = 'mn')
AND (t1.STATUS = 1)


Значение столбца "статус" во всех 2 миллионах строк равно 1.
Все различные значения для "ИМЯ_СЕРВЕРА" - это "mn" и "op". Я не кластеризованный индекс на столбце "Состояние" Имя_сервера и с колонкой ID, как включенный столбец.
Столбец "ID" - это поле varchar.

План выполнения запроса показывает поиск индекса для некластеризованного объекта. Общее время, которое он занимает, составляет около 4 секунд.

Однако я ищу любые предложения, где общее время выполнения может быть сокращено до гораздо меньшего, чем 4 секунды.

Что я уже пробовал:

Создал индекс, чтобы убедиться, что он ищет. Полученная производительность, но все же эти 4 секунды времени выполнения довольно высоки, так как этот запрос выполняется почти 1000 раз во время пакетной обработки, что, в свою очередь, увеличивает время выполнения задания.

3 Ответов

Рейтинг:
0

RickZeeland

Может быть, вы можете попробовать отфильтрованный индекс: Важное руководство по отфильтрованным индексам SQL Server[^]

А вот еще одна интересная статья: Сюрпризы производительности и допущения : группировка по сравнению с различными[^]


dinesh42

Я попробовал реализовать отфильтрованный индекс, оптимизатор использует отфильтрованный индекс, и количество логических чтений снизилось до 6000. Ранее с нормальным некластеризованным индексом общее количество логических чтений составляло 12000.

Я не уверен, что это сокращение логических чтений повлияет на общее выполнение запроса, когда он выполняется в течение 1000 раз во время пакетного выполнения?

dinesh42

при перестройке существующего индекса также логические чтения снизились до 6000, что аналогично отфильтрованному индексу !

RickZeeland

Это хорошая вещь, чтобы сделать переиндексацию на регулярной основе, SQL Server нуждается в небольшой помощи здесь. PostgreSQL нуждается в меньшем обслуживании, одна из причин, по которой мы выбрали PostgreSQL много лет назад :)

Рейтинг:
0

MadMyche

Добавление индексов (отфильтрованных или нет) полезно и является лучшим способом приблизиться к этому.

То, что я собираюсь добавить в это, - это использовать SSMS и просматривать план выполнения запроса определить, какой индекс поможет вам лучше всего.

Прочтите эту статью, чтобы помочь вам с SSMS и использованием планов выполнения
Management Studio Скрывает От Вас Недостающие Индексы. - Брент Озар Неограниченное®[^]


Рейтинг:
0

Aarti Meswania

Вы также можете попробовать следующие подходы

1. индексация поможет, но вы уже пробовали это сделать.
2. определите область действия, если это возможно, используйте "TOP", чтобы получить top X no. строк.
3. попробуйте альтернативный запрос "group by".

Счастливого Кодирования!
:)