пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Программирование в интернет:
» ПИ
» ОКГТМ
» КИНФС

Оптимізація запитів. Охарактеризуйте різні види оптимізації, їх переваги та недоліки.

Оптимизация запросов — это функция СУБД, осуществляющая поиск оптимального плана выполнения запросов из всех возможных для заданного запроса или же процесс изменения запроса и/или структуры БД с целью уменьшения использования вычислительных ресурсов при выполнении запроса. Один и тот же результат может быть получен СУБД различными способами (планами выполнения запросов), которые могут существенно отличаться как по затратам ресурсов, так и по времени выполнения. Задача оптимизации заключается в нахождении оптимального способа.

Причины ресурсоемкости запроса могут быть следующие:

  • плохая статистика по таблицам и индексам запроса;
  • проблемы с индексами в запросе;
  • проблемы с хинтами в запросе;
  • неэффективно построенный запрос;
  • неправильно настроены параметры инициализации базы данных, отвечающие за производительность запросов.

1. Проблемы с индексами

Отсутствие нужного индекса. Требуемое действие — создать новый индекс;

Построен эффективный индекс, но он работает не эффективно в силу следующих причин:

  • Индекс заблокирован от использования. Блокируют использование индекса следующие операции над столбцом, по которому используется индекс: SUBSTR, NVL, DECODE, TO_CHAR,TRUNC,TRIM, ||конкатенация, + цифра к цифровому полю и т.д. Решение – модифицировать запрос, освободиться от блокирующих операций или создать индекс по функции, блокирующей индекс.
  • Не собрана или неактуальная статистика по индексу. Решение – собрать статистику по индексу запуском процедуры, указанной выше. — Имеется хинт, блокирующий работу индекса, например NO_INDEX.
  • Неэффективно настроены параметры инициализации базы данных БД (особенно отвечающие за эффективную работу индексов, например, optimizer_index_caching и optimizer_index_cost_adj). Эффективность работы индексов повышалась, если optimizer_index_caching=95 и optimizer_index_cost_adj=1.

2. ​Неэффективно написанный запрос. К пример:

  • неэффективное соединение таблиц;
  • использование NOT и NOT IN в условии where;
  • блокировка индекса в силу использования неправильных функций к столбцу, по которому построен индекс;
  • большая вложенность запроса или большая его длина;
  • большой объем выбираемых данных, требующих подключения в работу дисков, в том числе для выполнения агрегированных функций (order by, group by и т.д.);
  • неэффективные хранимые процедуры.

21.01.2016; 23:33
хиты: 82
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь