27_SH43-0144-00 (1038594), страница 40
Текст из файла (страница 40)
Если на страницах индекса оставляется больше свободногопространства, реже будет выполняться разбиение страниц. Это уменьшаетпотребность в реорганизации таблицы, восстанавливающей последовательныйпорядок страниц, который улучшает эффективность предварительной выборки.Предварительная выборка - важный способ повышения производительности.Как сказано выше, если добавляемые значения ключа всегда большесуществующих, можно уменьшить значение условия PCTFREE оператораCREATE INDEX. Это ограничит объем неиспользуемого пространства,зарезервированного на каждой странице.В многораздельных базах данных уникальные индексы должны определятьсякак надмножества ключа разделения.Базовая таблица (или таблицы) реплицируемой сводной таблицы должна иметьиндекс уникальности и столбцы ключа этого индекса должны использоваться взапросе, определяющем эту реплицируемую сводную таблицу.
Дополнительнуюинформацию о реплицируемых сводных таблицах смотрите в руководствеРуководство администратора: Планирование.В случае внутрираздельного параллелизма можно улучшитьпроизводительность создания индекса, используя для выполняемых присоздании индекса операций сканирования и сортировки данных несколькопроцессоров. Чтобы разрешить использование нескольких процессоров, задайтедля intra_parallel значение YES(1) или ANY(-1).
Число используемых приоперации index create процессоров определяется системой и не зависит отпараметров конфигурации dft_degree или max_querydegree, степенипараллелизма времени выполнения программы или степени параллелизма прикомпиляции оператора SQL. Если параметр конфигурации базы данных indexsort имеет значение NO, для операции index create не будет использоватьсянесколько процессоров.| Создание пользовательских расширенных типов индексовДля поддержки пользовательских типов индексов DB2 Universal Databaseпозволяет создавать и применять свои собственные алгоритмы для основныхкомпонентов, которые определяют работу индекса. Компоненты, которыеможно заменить:v Поддержка индекса.
Обеспечивает возможность отображения содержимогостолбца индекса на ключи индекса. Такое отображение осуществляетсяпользовательской функцией отображения. В расширенном индексе можетучаствовать ровно один столбец структурированного типа. В отличие отобычного индекса, расширенный индекс может содержать несколько записейиндекса для каждой строки.
Наличие нескольких записей индекса каждой||||||||||174Руководство администратора: Реализация|||||||||строки позволяет сохранить текстовый документ как объект с отдельнымизаписями индекса для каждого ключевого слова документа.v Использование индекса. Позволяет разработчику прикладных программсвязать условия фильтрации (предикаты диапазона) с произвольнойпользовательской функцией, работа которой была бы в противном случаенепонятной для оптимизатора. Это позволяет DB2 избежать отдельныхвызовов пользовательской функции для каждой строки и тем самым избежатьпереключений контекстов между клиентом и сервером, что значительноулучшает производительность.|||Примечание: Чтобы оптимизатор мог использовать пользовательскуюфункцию, она должна быть детерминированной и не должнадопускать побочных эффектов.|||Можно также задать необязательную функцию фильтрации данных.Оптимизатор использует этот фильтр для блока выбранных данных передвыполнением пользовательской функции.||||||Только для столбцов структурированных или особых типов можетиспользоваться расширение индекса для создания пользовательскогорасширенного типа индекса для таких объектов.
Пользовательскийрасширенный тип индекса не должен:v Быть определен с индексами кластеризацииv Содержать включенных (INCLUDE) столбцов|||Подробности поддержки индексаС помощью оператора CREATE INDEX EXTENSION определяются двакомпонента, выполняющие эти операции для индекса.||||Поддержка индекса - это процесс преобразования содержимого столбца индекса(или исходного ключа) в индексный ключ назначения. Для определения этогопроцесса преобразования используется табличная функция, ранее определеннаяв базе данных.||||Условие FROM SOURCE KEY задает структурированный тип данных илиособый тип для исходного столбца ключа, поддерживаемого этим расширениеминдекса.
Для исходного столбца ключа задается и связывается с ним одно имяпараметра и тип данных.||||||Условие GENERATE KEY USING задает пользовательскую табличнуюфункцию, используемую для генерации ключа индекса. Выходное значение этойфункции должно быть задано в условии TARGET KEY (которое описываетсяниже). Выходное значение этой функции может также использоваться в качествевходного значения для функции фильтрации, заданного в условии FILTERUSING.Глава 3. Создание базы данных175Подробности поиска в индексе||Поиск в индексе отображает аргументы поиска на диапазоны поиска.||||||Условие WITH TARGET KEY задает параметры ключей назначения, значениякоторых создаются функцией генерации ключей, заданной в условииGENERATE KEY USING. Для столбца ключа назначения задается и связываетсяс ним одно имя параметра и тип данных.
Этот параметр соответствует столбцамтаблицы RETURNS пользовательской табличной функции, заданной в условииGENERATE KEY USING.||||||||||||||||||||||||||||||Условие SEARCH METHODS определяет для этого индекса один или несколькометодов поиска. Каждый метод поиска состоит из имени метода, аргументовпоиска, функции генерации диапазона и необязательной функции фильтрациииндекса. Каждый метод поиска определяет, как пользовательская табличнаяфункция генерирует диапазоны поиска индекса для базового пользовательскогоиндекса.
Кроме того, каждый метод поиска определяет, как пользовательскаяскалярная функция может задавать дополнительные спецификаторы дляконкретного диапазона поиска.v Условие WHEN задает метку для метода поиска. Метка - это идентификаторSQL, связанный с именем метода, заданным в правиле применения индекса(которое определяется в условии PREDICATES пользовательской функции). Вкачестве аргументов функции диапазонов и/или функции фильтрации индексазадаются одно или несколько имен параметров и типов данных.
УсловиеWHEN задает действие, которое может выполнить оптимизатор в случае,когда условие PREDICATES оператора CREATE FUNCTION совпадает совходным запросом.v Условие RANGE THROUGH задает пользовательскую внешнюю табличнуюфункцию, создающую диапазоны ключей индекса. Это позволяетоптимизатору избежать вызова связанной пользовательской функции вслучаях, когда ключи индекса не попадают в диапазоны ключей.v Необязательное условие FILTER USING можно использовать для заданияпользовательской внешней табличной функции или выражения CASE,используемых для фильтрации записей индекса, возвращаемых функциейсоздания диапазонов. Если значение, возвращаемое функцией фильтрациииндекса или выражением CASE, равно 1, из таблицы считывается строка,соответствующая этой записи индекса.
Если возвращено какое-либо иноезначение (не равное 1), эта запись индекса отвергается. Эта возможностьполезна, если затраты на второй фильтр малы по сравнению с затратами навыполнение исходного метода, а избирательность второго фильтраотносительно невелика.Подробности применения индекса||Применение индекса происходит при оценке метода поиска.176Руководство администратора: Реализация|||Оператор CREATE FUNCTION для внешней скалярной функции создаетпользовательский предикат, используемый с методами поиска, определеннымидля этого расширения индекса.||||||Условие PREDICATES определяет использующие эту функцию предикаты, длякоторых возможно применение этого расширения индекса (и для которыхможно использовать необязательное условие SELECTIVITY, чтобы задатьусловие поиска для конкретного предиката).
Если задано условие PREDICATES,функция должна быть определена с опциями DETERMINISTIC и NO EXTERNALACTION.||||||||||||||||||||v Условие WHEN задает конкретное использование определенной в предикатефункции с операцией сравнения (=, >, < и другими) и константой иливыражением (с использованием условия EXPRESSION AS). Для предиката,использующего эту функцию с той же операцией сравнения и той жеконстантой или выражением, могут использоваться фильтрация и применениеиндекса.
Константы в основном используются для булевских выражений,результат которых - 1 или 0. Для всех остальных случаев лучше использоватьусловие EXPRESSION AS.v Условие FILTER USING задает функцию фильтрации, которая можетиспользоваться для дополнительной фильтрации таблицы результатов. Этоболее быстрый вариант определенной функции (используемой в предикате),поскольку уменьшается число строк, для проверки годности которых нужновыполнить пользовательский предикат. Если результаты, создаваемые поиндексу, близки к ожидаемым результатам пользовательского предиката,программа функции фильтрации может быть ненужной.v Для каждого метода поиска расширения индекса можно дополнительноопределить набор правил применения индекса. Можно также определить врасширении индекса метод поиска, чтобы описать назначения поиска,аргументы поиска и то, как они должны использоваться для поиска в индексе.– Условие SEARCH BY INDEX EXTENSION задает расширение индекса.|||||||||||||– Необязательное условие EXACT указывает, что просмотр индекса дает теже результаты, что и применение предиката.