Оптимизация SQL-запросов

Оптимизация SQL-запросов – важный шаг при обработке любого оператора языка манипулирования данными с заданными во фразе WHERE условиями поиска. Цель оптимизатора – выбор наиболее эффективного способа выполнения SQL-запроса. Оптимизатор встроен в ядро СУБД, и в своей работе использует универсальный метод оптимизации, применяемый ко всем SQL-запросам определенной структуры. В силу универсальности оптимизатора результаты его работы могут оказаться не достаточно эффективными для некоторого конкретного SQL-запроса. Часто разработчик клиентского приложения знает об обрабатываемых данных гораздо больше, чем оптимизатор, поэтому он может выбрать более эффективный способ выполнения SQL-запроса, чем оптимизатор, или дать оптимизатору необходимые подсказки (hints).

В СУБД ЛИНТЕР оптимизация выполнения SQL-запросов осуществляется на двух уровнях:

  1. внутренний уровень – оптимизация ядром СУБД на основе синтаксиса SQL-запроса. При использовании этого метода учитывается иерархическое старшинство операций. Если для какой-либо операции существует более одного пути ее выполнения, то выбирается тот путь, чей ранг выше, т.к. в большинстве случаев он выполняется быстрее, чем путь с более низким рангом;

  2. внешний уровень – с помощью подсказок программиста. Оптимизатор не может использовать индексный путь доступа, основываясь только на существовании индекса; эффективный путь доступа к данным можно подсказать в тексте SQL-запроса.