DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Когда использовать индексы?

ЕСЛИ учесть, что единственной целью применения индекса является умень-
шение количества операций ввода/вывода, то факт, что при его использовании
запрос выполняет больше операций ввода/вывода, чем при сканировании пол-
ной таблицы, существенно снижает полезность самого существования индекса.
Допустим, к примеру, что таблица, содержащая 1 млн строк, хранится в 5 тысячах блоков. Далее предположим, что строки с удовлетворяющим нас значением
столбца разбросаны по 4 тысячам блоков. Понятно, что абсолютно не оптимально создавать и использовать для этого столбца индекс. Это верно даже в том
когда доля        выбранных из таблицы, не превышает одного процента, если для выборки этих данных приходится обращаться к 80% общего числа
блоков таблицы. Если к этому числу обращений добавить количество блоков ин-
декса, которые необходимо задействовать, чтобы прочесть из них информацию о        стоимость использования индекса стремительно возрастает, а
производительность падает. Следовательно, для данного примера использование индекса нецелесообразно.
С другой стороны, если таблица с одной тысячей строк подверглась значитель­ному количеству повторяющихся операций 

вставки 

и 

удаления 

данных, то "уро­вень максимального подъема воды" (максимальное количество строк таблицы) будет очень высоким, поскольку он не сбрасывается при выполнении операции 

удаления. 

Пусть максимальный уровень составляет 1 тысячу блоков, но имеющи­еся в наличии 1 тысяча строк физически размещены в 100 блоках. В этом случае, даже если в запрос попадают все 100% строк таблицы:, имеет смысл использовать индекс, поскольку число посещаемых блоков и операций вво­да/вывода все равно будет значительно меньше, чем при сканировании полной таблицы. Очевидной проблемой является фрагментированная таблица, хотя с точки зрения ввода/вывода использование ввода/вывода все еще является полезным.
Мораль истории
Недостатки избирательности столбцов при использовании индексов были
впервые отмечены в малоизвестной статье "Predicting the Utility of the Nonunique Index" Cary Millsap, Craig Shallahamer, M. Adler 

{OracleMagazine, 

Spring 1993,
pp. 48-53). Полезность индекса рассматривалась с точки зрения чистой избирательности строк. Совершенно ясно, что вопрос о том, использовать индекс для
'запроса или нет, должен определяться не процентами обработанных или вы-
бранных из таблицы строк, а количеством блоков, которые нужно посетить для
выборки данных. Если число блоков, к которым были обращения при использовании        меньше, чем при сканировании полной таблицы, то применение индекса полезно. В остальных случаях обеспечивается лучшая
производительность при сканировании полной таблицы. Критерии использования индекса не должны быть основаны на процентах избирательности строк,
поскольку невозможно установить конкретный процент для всех приложений.
У каждого приложения и базы данных имеются свои идиосинкразии, а обобщений по избирательности строк и релевантности к индексам следует избегать,
поскольку нет двух приложений, которые вели бы себя одинаково. Потребности каждого приложения уникальны и управление производительностью необходимо к ним приспособить.
 


завод металлоконструкций и завод металлоконструкций лучший бесплатный сайт. . Как стать счастливой женой - взлом почтового ящика на рамблер. Почтовые ящики от производителя.







jAntivirus