| Каталог | Индекс раздела |
| Назад | Оглавление | Вперед |
В операторе CREATE INDEX вводится возможность создавать индексы для XML-данных. Это единственный вид индексов, в котором могут участвовать XML-данные.
Синтаксис
(часть, не относящаяся непосредственно к XML показана несколько упрощенно)
>>-CREATE--+--------+--INDEX--имя-индекса------------------------>
'-UNIQUE-'
>--ON--имя-таблицы--(--имя-столбца--)--спецификация-индекса-xml--><
спецификация-индекса-xml:
(1)
|--GENERATE KEY USING XMLPATTERN-------фраза-xml-шаблона-------->
>-- фраза-типа-xml-----------------------------------------------|
фраза-xml-шаблона:
|--'--+------------------------------+--выражение-шаблона--'---|
'-объявление-пространства-имен-'
объявление-пространства-имен:
.----------------------------------------------------------------------.
V |
|----+-DECLARE NAMESPACE--префикс-пространства-имен=uri-пространства-имен-+--;-+--|
'-DECLARE DEFAULT ELEMENT NAMESPACE--uri-пространства-имен----------------'
выражение-шаблона:
.-----------------------------------------------.
V |
|----+-/--+-ось-продвижения-+-проверка-имени-xml-+-+------------------|
'-//-' '-проверка-вида-xml--'
ось-продвижения:
.-child::--------------.
|--+----------------------+-------------------------------------|
+-@--------------------+
+-attribute::----------+
+-descendant::---------+
+-self::---------------+
'-descendant-or-self::-'
проверка-имени-xml:
|--+-квалифицированное-имя-xml-+--------------------------------|
'-групповой-символ-xml------'
групповой-символ-xml:
|--+-*--------------+-------------------------------------------|
+-xml-nsprefix:*-+
'-*:xml-ncname---'
проверка-вида-xml:
|--+-node()---------------------+-------------------------------|
+-text()---------------------+
+-comment()------------------+
'-processing instruction(--)-'
фраза-типа-xml:
|--AS--тип-данных------------------------------------------------|
тип-данных:
|--sql-тип-данных-------------------------------------------------|
sql-тип-данных:
|--SQL--+-VARCHAR--+-(--целое--)-+-+--------------------------|
| '-HASHED------' |
+-DOUBLE-------------------+
+-DATE---------------------+
'-TIMESTAMP----------------'
Описание
спецификация-индекса-xml
Задает , как генерируются индексные ключи из XML-документов, хранящихся в XML-столбце. Спецификация-индекса-xml не может задаваться, если задано более одного индексного столбца или столбец не имеет тип данных XML.GENERATE KEY USING XMLPATTERN фраза-xml-шаблона
Задает части XML-документа, которые должны индексироваться.фраза-xml-шаблона
Содержит выражение шаблона, идентифицирующее узлы, которые должны индексироваться. Состоит из необязательного объявления-пространства-имен и обязательного выражения-шаблона.объявление-пространства-имен
Если выражение шаблона содержит квалифицированные имена, должно быть задано объявление-пространства-имен для определения префиксов пространств имен. Для неквалифицированных имен может быть определено пространство имен по умолчанию.DECLARE NAMESPACE префикс-пространства-имен=uri-пространства-имен
Отображает префикс-пространства-имен, который является NCName, на uri-пространства-имен, который является строковым литералом. Объявление-пространства-имен может содержать несколько отображений префиксов-пространств-имен на uri-пространства-имен. Префикс-пространства-имен должен быть уникальным в списке объявлений-пространств-имен (SQLSTATE 10503).DECLARE DEFAULT ELEMENT NAMESPACE uri-пространства-имен
Объявляет URI пространства имен по умолчанию для неквалифицированных имен элементов или типов. Если не задано пространство имен по умолчанию, неквалифицированные имен элементов и типов не находятся в пространстве имен. Может быть объявлено только одно пространство имен по умолчанию (SQLSTATE 10502).выражение-шаблона
Задает узлы XML-документа, которые должны индексироваться. Выражение-шаблона может содержать поисковые символы (*). Оно подобно выражению маршрута в XQuery, но поддерживает только подмножество языка Xquery, поддерживаемое в DB2./ (прямой слеш)
Разделяет шаги маршрута.// (двойной прямой слеш)
Это сокращенный синтаксис для /descendant-or-self::node()/. Вы не можете использовать //, если вы задали также UNIQUE.ось-продвижения
child::
Задает дочерний узел контекстного узла. Это ось по умолчанию, если не задано другой оси.@
Задает атрибуты контекстного узла. Это сокращенный синтаксис для attribute::.attribute::
Задает атрибуты контекстного узла.descendant::
Задает потомков контекстного узла. Вы не можете использовать descendant:: , если вы задали также UNIQUE.self::
Задает сам контекстный узел.descendant-or-self::
Задает контекстный узел и потомков контекстного узла. Вы не можете использовать descendant-or-self::, если вы задали также UNIQUE.проверка-имени-xml
Задает имя узла для шага, используя квалифицированное имя XML (квалифицированное-имя-xml) или групповой символ (групповой-символ-xml).xml-ncname
Имя XML, как оно определено в XML 1.0. Не может включать в себя двоеточие.квалифицированное-имя-xml
Задает квалифицированное имя XML, которое может иметь две возможные формы:
- xml-nsprefix:xml-ncname, где xml-nsprefix - xml-ncname, которое идентифицирует пространство имен в области видимости
- xml-ncname, которое показывает, что в качестве неявного xml-nsprefix должно быть применено пространство имен по умолчанию
групповой-символ-xml
Задает квалифицированное-имя-xml как групповой символ в трех возможных формах:
- * (единственный символ звездочки) показывает любое квалифицированное-имя-xml
- xml-nsprefix:* показывает любое xml-ncname в заданном пространстве имен
- *:xml-ncname показывает заданное имя XML в любом пространстве имен в области видимости
Вы не можете использовать групповой-символ-xml, если вы задали также UNIQUE.
проверка-вида-xml
Эта опция применяется для задания того, какому типу узлов соответствует ваш шаблон. Следующие опции доступны для вас:node()
Соответствует любому узлу. Вы не можете использовать node(), если вы задали также UNIQUE.text()
Соответствует любому текстовому узлу.comment()
Соответствует любому узлу комментария.processing-instruction()
Соответствует любому узлу инструкции обработки. Вы не можете использовать processing-instruction(), если вы задали также UNIQUE.фраза-типа-xml
AS тип-данных
Задает тип данных, в который индексные значения преобразуются перед сохранением.
Преобразование в заданный тип данных для DATE, TIMESTAMP и DOUBLE может приводить к потере точности. Например, потеря точности может произойти при преобразовании числового строкового значения в DOUBLE, если числовое строковое значение имеет точность, большую, чем точность, поддерживаемая для типа данных DOUBLE. Если значение в XML-документе содержит значение, выходящее за пределы диапазона, который поддерживается целевым типом данных SQL, возвращается ошибка (SQLSTATE 23526). Если значение не может быть преобразовано в заданный тип данных, индексный элемент для этого значение не добавляется, но никакой ошибки или предупреждения не возвращается.
Если индекс является уникальным, уникальность значение проверяется после его преобразования в индексный тип.
тип-данных
Поддерживаются следующие типы данных:sql-тип-данных
Поддерживаются такие типы данных SQL:VARCHAR(целое)
Если задана такая форма VARCHAR, DB2 использует целое как ограничение. Если индексируемые узлы документов имеют значения, которые длиннее, чем целое, документы не вставляются в таблицу, если индекс уже существует. Если индекс еще не существует, индекс не создается. Целое является значением от 1 до максимума, зависящего от размера страницы. В таблице 11 показаны максимальные значения для каждого размера страницы.Таблица 11. Максимальная длина узла документа по размерам страниц
Размер страницы Максимальная длина узла документа (байт) 4KB 817 8KB 1841 16KB 3889 32KB 7985 VARCHAR HASHED
Задавайте VARCHAR HASHED для обработки индексирования символьных строк произвольной длины. Длина индексируемых строк не имеет предела. DB2 генерирует 8-байтный хеш-код по всей строке. Индексы, которые используют такие хешированные строки, могут применяться только в поиске на равенство.DOUBLE
Задает, что для индексирования числовых значений используется тип данных DOUBLE.DATE
Задает, что для индексирования значений дат XML используется тип данных DATE.TIMESTAMP
Задает, что для индексирования значений даты-времени используется тип данных TIMESTAMP.
Примечания:
Пример 1: Создать индекс по XML-данным для таблицы с именем COMPANYINFO, которая содержит XML-столбец с именем COMPANYDOCS. XML-столбец COMPANYDOCS содержит большое число XML-документов, подобных показанному ниже:
<company name="Company1">
<emp id="31201" salary="60000" gender="Female">
<name>
<first>Laura</first>
<last>Brown</last>
</name>
<dept id="M25">
Finance
</dept>
</emp>
</company>
Пользователям таблицы COMPANYINFO часто нужно выбирать информацию о сотруднике, используя ID сотрудника. Индекс, подобный следующему, может сделать эту выборку более эффективной.
CREATE INDEX EMPINDEX ON COMPANYINFO(COMPANYDOCS)
GENERATE KEY USING XMLPATTERN '/company/emp/@id'
AS SQL DOUBLE
Пример 2: Следующий индекс логически эквивалентен индексу, созданному в предыдущем примере, за исключением того, что он использует несокращенный синтаксис.
CREATE INDEX EMPINDEX ON COMPANYINFO(COMPANYDOCS)
GENERATE KEY USING XMLPATTERN '/child::company/child::emp/attribute::id'
AS SQL DOUBLE
Пример 3: Создать индекс на столбец с именем DOC, индексируя только названия книг как VARCHAR(100). Поскольку название книги должно быть уникальным по всем книгам, индекс должен быть уникальным.
CREATE UNIQUE INDEX MYDOCSIDX ON MYDOCS(DOC)
GENERATE KEY USING XMLPATTERN '/book/title'
AS SQL VARCHAR(100)
Пример 4: Создать индекс на столбец с именем DOC, индексируя номер главы как DOUBLE. Этот пример включает объявления пространств имен.
CREATE INDEX MYDOCSIDX ON MYDOCS(DOC)
GENERATE KEY USING XMLPATTERN 'declare namespace b="http://www.foobar.com/book/"; declare namespace c="http://acme.org/chapters"; /b:book/c:chapter/@number'
AS SQL DOUBLE
| Назад | Оглавление | Вперед |
| Каталог | Индекс раздела |