Аннотация. В настоящей лекции рассматриваются вопросы проектирования для обеспечения требуемого уровня производительности физической структуры хранилища данных на основе СУБД-ориентированных средств: индексов, секций, кластеров.
Ключевые слова: индексирование, индексы, ключевые поля или ключи, индекс со структурой B-Tree, кластеризованные и некластеризованные индексы, исключительно индексные таблицы, битовые индексы, индексы с обращением ключа, индексы на основе значения функций, кардинальность колонки, фактор селективности выборки, секционирование, секция таблицы, ключ секционирования, секционирование по диапазону, хеш-секционирование, составное секционирование, секционирование индексов, секционирование представлений, функция секционирования, схема секционирования, кластеризация, кластеры, кластерный ключ или ключ кластеризации, кластер, хеш-кластер, индексный кластер.
Цель лекции
Изучив материал настоящей лекции, обучающийся будет знать:
И научится:
Литература: [2], [3], [37], [67].
В настоящей лекции мы рассмотрели три основных метода повышения производительности запросов, которые используют встроенные в СУБД механизмы и объекты: индексы, секции и кластеры. Основная идея индексирования таблиц состоит в создании специальных объектов СУБД — индексов для повышения производительности выборки строк таблиц в запросах. Как правило, для первичных ключей таблиц СУБД создает индексы автоматически. При создании дополнительных индексов следует помнить о том, что индексы требуют от СУБД дополнительных усилий для их поддержки и обслуживания, занимают дополнительное место в файловой системе и не всегда используются оптимизатором запросов при обработке команды SELECT. Основная идея секционирования таблиц — с помощью встроенных команд СУБД разбить таблицы большого объема на ряд физических фрагментов в соответствии с некоторым критерием секционирования, чтобы сократить объем ввода-вывода при обработке фрагментов. Секционирование очень часто применяется при работе с таблицами большого объема. Если в проектируемой базе данных предполагается наличие объектов большого объема (более 1 Гб), обязательно следует рассмотреть возможность использования техники секционирования. Решение вопроса, стоит ли применять секционирование, в основном зависит от того, насколько велика таблица или насколько она может увеличиться, как она используется и насколько эффективно отвечает на пользовательские запросы и операции обслуживания. В целом, большую таблицу стоит секционировать, если выполняются следующие два условия:
При разбиении таблиц на секции следует помнить о том, что секции требуют от СУБД дополнительных усилий для их поддержки и обслуживания. Основная идея кластеризации таблиц состоит в том, чтобы хранить совместно используемые в запросах колонки различных таблиц на общих физических страницах дискового пространства файловой структуры с целью повышения производительности обработки запросов. Однако нужно помнить, что проектирование кластеров — это «штучная» работа. Выигрыш в производительности может быть не слишком высок по сравнению с другими проектными решениями. Чтобы построить высокопроизводительный кластер для таблиц, полезно знать статистику использования аналогичного кластера при эксплуатации аналогичного ХД, а это не всегда бывает известно.
Контрольные вопросы: