ЕСЛИ учесть, что единственной целью применения индекса является умень-
шение количества операций ввода/вывода, то факт, что при его использовании
запрос выполняет больше операций ввода/вывода, чем при сканировании пол-
ной таблицы, существенно снижает полезность самого существования индекса.
Допустим, к примеру, что таблица, содержащая 1 млн строк, хранится в 5 тысячах блоков. Далее предположим, что строки с удовлетворяющим нас значением
столбца разбросаны по 4 тысячам блоков. Понятно, что абсолютно не оптимально создавать и использовать для этого столбца индекс. Это верно даже в том
когда доля выбранных из таблицы, не превышает одного процента, если для выборки этих данных приходится обращаться к 80% общего числа
блоков таблицы. Если к этому числу обращений добавить количество блоков ин-
декса, которые необходимо задействовать, чтобы прочесть из них информацию о стоимость использования индекса стремительно возрастает, а
производительность падает. Следовательно, для данного примера использование индекса нецелесообразно.
шение количества операций ввода/вывода, то факт, что при его использовании
запрос выполняет больше операций ввода/вывода, чем при сканировании пол-
ной таблицы, существенно снижает полезность самого существования индекса.
Допустим, к примеру, что таблица, содержащая 1 млн строк, хранится в 5 тысячах блоков. Далее предположим, что строки с удовлетворяющим нас значением
столбца разбросаны по 4 тысячам блоков. Понятно, что абсолютно не оптимально создавать и использовать для этого столбца индекс. Это верно даже в том
когда доля выбранных из таблицы, не превышает одного процента, если для выборки этих данных приходится обращаться к 80% общего числа
блоков таблицы. Если к этому числу обращений добавить количество блоков ин-
декса, которые необходимо задействовать, чтобы прочесть из них информацию о стоимость использования индекса стремительно возрастает, а
производительность падает. Следовательно, для данного примера использование индекса нецелесообразно.
С другой стороны, если таблица с одной тысячей строк подверглась значительному количеству повторяющихся операций
вставки
иудаления
данных, то "уровень максимального подъема воды" (максимальное количество строк таблицы) будет очень высоким, поскольку он не сбрасывается при выполнении операцииудаления.
Пусть максимальный уровень составляет 1 тысячу блоков, но имеющиеся в наличии 1 тысяча строк физически размещены в 100 блоках. В этом случае, даже если в запрос попадают все 100% строк таблицы:, имеет смысл использовать индекс, поскольку число посещаемых блоков и операций ввода/вывода все равно будет значительно меньше, чем при сканировании полной таблицы. Очевидной проблемой является фрагментированная таблица, хотя с точки зрения ввода/вывода использование ввода/вывода все еще является полезным.Мораль истории
Недостатки избирательности столбцов при использовании индексов были
впервые отмечены в малоизвестной статье "Predicting the Utility of the Nonunique Index" Cary Millsap, Craig Shallahamer, M. Adler
pp. 48-53). Полезность индекса рассматривалась с точки зрения чистой избирательности строк. Совершенно ясно, что вопрос о том, использовать индекс для
'запроса или нет, должен определяться не процентами обработанных или вы-
бранных из таблицы строк, а количеством блоков, которые нужно посетить для
выборки данных. Если число блоков, к которым были обращения при использовании меньше, чем при сканировании полной таблицы, то применение индекса полезно. В остальных случаях обеспечивается лучшая
производительность при сканировании полной таблицы. Критерии использования индекса не должны быть основаны на процентах избирательности строк,
поскольку невозможно установить конкретный процент для всех приложений.
У каждого приложения и базы данных имеются свои идиосинкразии, а обобщений по избирательности строк и релевантности к индексам следует избегать,
поскольку нет двух приложений, которые вели бы себя одинаково. Потребности каждого приложения уникальны и управление производительностью необходимо к ним приспособить.
впервые отмечены в малоизвестной статье "Predicting the Utility of the Nonunique Index" Cary Millsap, Craig Shallahamer, M. Adler
{OracleMagazine,
Spring 1993,pp. 48-53). Полезность индекса рассматривалась с точки зрения чистой избирательности строк. Совершенно ясно, что вопрос о том, использовать индекс для
'запроса или нет, должен определяться не процентами обработанных или вы-
бранных из таблицы строк, а количеством блоков, которые нужно посетить для
выборки данных. Если число блоков, к которым были обращения при использовании меньше, чем при сканировании полной таблицы, то применение индекса полезно. В остальных случаях обеспечивается лучшая
производительность при сканировании полной таблицы. Критерии использования индекса не должны быть основаны на процентах избирательности строк,
поскольку невозможно установить конкретный процент для всех приложений.
У каждого приложения и базы данных имеются свои идиосинкразии, а обобщений по избирательности строк и релевантности к индексам следует избегать,
поскольку нет двух приложений, которые вели бы себя одинаково. Потребности каждого приложения уникальны и управление производительностью необходимо к ним приспособить.
< Предыдущая | Следующая > |
---|