Опубликован: 02.08.2007 | Доступ: свободный | Студентов: 3890 / 753 | Оценка: 4.55 / 4.39 | Длительность: 27:09:00
ISBN: 978-5-9556-0111-3
Лекция 16:

Оптимизация обработки запросов

< Лекция 15 || Лекция 16: 123456

Исключите любые АТ-функции (@), выполняющиеся в WHERE, и посмотрите, не выросла ли производительность. Может быть, индекс не используется из-за применения функции. В этом случае можно построить индекс с использованием этой функции.

Шаг 5. Создать индексы для одной колонки для критических параметров. Если завершены шаги 1-4 и запрос еще не удовлетворяет требованиям производительности, можно попытаться создать индексы специально для этого запроса, чтобы увеличить его производительность. В общем, индексы для одной колонки предпочтительнее, чем составные индексы, так как более вероятно их использование в других запросах. Попытайтесь увеличить производительность запроса с индексом для одной колонки, прежде чем разрабатывать многоколоночные индексы.

Локализуйте следующие колонки таблицы из запроса, которые не имеют индекса:

  • Колонки соединения. При этом следует рассмотреть также подзапросы, которые оптимизатор преобразует в соединения. Если первичный ключ таблицы является составным ключом, соединение специфицируется через несколько колонок и составной индекс необходим для увеличения производительности этого соединения. Этот индекс должен уже существовать.
  • Колонки GROUP BY. Если предложение GROUP BY содержит более чем одну колонку, необходим составной индекс для увеличения производительности этого GROUP BY предложения. Опустите создание этих колонок до шага 6.
  • Колонки ORDER BY. Если предложение ORDER BY содержит более чем одну колонку, необходим составной индекс для увеличения производительности этого ORDER BY предложения. Опустите создание этих колонок до шага 6.
  • Низкая стоимость предикатов. Это колонки таблицы, которые указываются в предикатах выборки или селекции WHERE предложения, обладающие низким значением фактора селективности для таблиц из предложения FROM.

Сравните эти колонки с критическими факторами, определенными на шаге 4. Каждая из колонок, идентифицированная выше, должна соответствовать одному из критических предложений или предикатов, определенных на шаге 4. Если это так, создайте индекс для каждой из этих колонок. Определите, будет ли добавление этих индексов изменять план запроса. Если изменения будут иметь место, выполните запрос для того, чтобы определить, увеличилась ли производительность после добавления этих индексов.

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

Шаг 6. Создать индексы для нескольких колонок. Процедура идентификации колонок для создания составных индексов состоит в следующем:

  1. Создать составной индекс.
  2. Определить, изменился ли план запроса. Если изменился, выполнить запрос для того, чтобы определить, увеличилась ли производительность.
  3. Если производительность не увеличилась, создайте другой индекс и повторите процесс.

Типы составных индексов приведены ниже.

  • Несколько колонок в предложении GROUP BY. Если предложение GROUP BY содержит более чем одну колонку, создайте индекс для всех этих колонок. Специфицируйте колонки в том же порядке, как они указаны в предложении.
  • Несколько колонок в предложении ORDER BY. Если предложение ORDER BY содержит более чем одну колонку, создайте индекс для всех этих колонок. Специфицируйте колонки в том же порядке, как они указаны в предложении. Также не забудьте указать последовательность сортировки для индекса.
  • Колонки соединения плюс низкая стоимость ограничений. Для каждой таблицы из предложения FROM, которая имеет по крайней мере один предикат в предложении WHERE, создайте составной индекс для колонок соединения и колонки из ограничивающего предиката с низким фактором селективности.
  • Колонки соединения плюс все ограничения. Для каждой таблицы из предложения FROM, которая имеет по крайней мере один предикат в предложении WHERE, создайте составной индекс для колонок соединения и всех колонок из всех предикатов. Порядок колонок в индексе является критическим для оптимизатора. Колонки из предикатов равенства следует размещать ранее всех других колонок в порядке возрастания фактора селективности. Далее следует размещать колонки из предикатов неравенства, которые имеют наименьший фактор селективности и так до последней колонки индекса. Все другие колонки в предикатах, вероятно, не будут сильно влиять на производительность предложения.

Шаг 7. Удалить все индексы, которые не используются в плане запроса. Как уже указывалось выше, индексы замедляют выполнение команд DML, а их сопровождение требует времени и увеличивает стоимость обработки. Следовательно, вам следует проследить использование всех созданных индексов и удалить те, которые не используются запросом.

Литература: [7], [23], [38], [47].

< Лекция 15 || Лекция 16: 123456
Александра Каева
Александра Каева
Михаил Забелкин
Михаил Забелкин