Двадцать пять заповедей SQL - Знайте свои данные
ОГЛАВЛЕНИЕ
14. Знайте свои данные.
Как отмечалось выше, вы должны быть близко знакомы со своими данными. Например, пусть имеется таблица с именем BOXER и двумя столбцами BOXER_NAME и SEX. Для столбца SEX существует неуникальный индекс. Если имеется равное число боксеров мужского и женского пола, то следующий запрос будет быстрее выполнен путем полного просмотра таблицы:
SELECT BOXER_NAME
FROM BOXER
WHERE SEX = 'F';
Можно гарантировать такой способ выполнения, включив в запрос указание FULL.
Если же таблица содержит 98% строк, относящихся к боксерам-мужчинам, то следующий запрос будет выполнен быстрее по причине использования индексного сканирования:
SELECT BOXER_NAME --+ INDEX (BOXER SEX)
FROM BOXER
WHERE SEX = 'F';
Этот пример иллюстрирует, насколько важно знать распределение данных. Эффективность выполнения SQL-запросов будет сильно меняться при росте размеров базы данных и изменении распределения данных. В Oracle 7.3 была включена функция HISTOGRAMS, позволяющая оптимизатору быть в курсе распределения данных в таблице и выбирать соответствующий план выполнения запроса.