Двадцать пять заповедей 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, позволяющая оптимизатору быть в курсе распределения данных в таблице и выбирать соответствующий план выполнения запроса.