Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2004 → | ||||||
1
|
2
|
3
|
4
|
5
|
||
---|---|---|---|---|---|---|
7
|
8
|
9
|
10
|
11
|
12
|
|
14
|
15
|
16
|
17
|
18
|
19
|
|
20
|
22
|
23
|
24
|
25
|
26
|
|
27
|
28
|
29
|
31
|
Статистика
-20 за неделю
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#228<< #229 |
СОДЕРЖАНИЕ Поддержка XML в Microsoft SQL Server 2005 (продолжение)
По материалам статьи Shankar Pal, Mark Fussell и Irwin Dolobowsky:
XML Support in Microsoft SQL Server 2005 Вторичные индексы XML Когда создан первичный индекс XML, можно создать вторичные индексы XML, чтобы ускорить выполнение запросов разных классов. Три типа вторичных индексов XML - PATH, PROPERTY и VALUE - дают выигрыш в запросах, основанных на пути, сценариях управления пользовательскими свойствами, и запросах, основанных на значениях, соответственно. Индекс PATH строит сбалансированное дерево на столбцах (path, value) первичного индекса XML. Значение для пути рассчитывается из выражения пути; значение узла также используется, если оно существует. С известными основными полями индекса PATH поиск по индексу PATH увеличивает обработки выражения пути. Наиболее распространенным случаем является использование метода exist() на столбцах XML в выражении WHERE команды SELECT. Индекс PROPERTY создает сбалансированное дерево на столбцах (PK, path, value) первичного индекса XML, где PK - первичный ключ базовой таблицы. Этот индекс помогает искать значения свойств в экземпляре XML. И, наконец, индекс VALUE создает сбалансированное дерево на столбцах (value, path) первичного индекса XML. Этот индекс ускоряет выполнение запросов, где значение узла известно, но его путь неточно определен в запросе. Такая ситуация обычно возникает при поиске типа descendant-or-self, как, например, в //author[last-name="Howard"], где элементы <author> могут встретиться на любом уровне иерархии. Такая ситуация также возникает в запросах со специальными символами, таких, как /book [@* = "novel"], где запрос ищет элементы <book> с атрибутом, имеющим значение "novel". Индекс VALUE также полезен для сканирования набора значений для типизированного XML. В иерархии XML может размещаться до 128 уровней; экземпляры XML, содержащие более длинные пути, не принимаются при вставке и изменении. Кроме этого, индексируется до 128 первых байт значения узла; более длинные значения размещаются внутри системы и не индексируются. Пример: поиск, основанный на пути Предположим, что следующий запрос часто выполняется: SELECT xCol FROM docs WHERE xCol.exist ('/book[@genre = "novel"]') = 1 Выражение пути /book/@genre и значение "novel" соответствуют ключевым полям индекса PATH. Соответственно, вторичный индекс XML типа PATH может помочь в этом случае: CREATE XML INDEX idx_xCol_Path on docs (xCol) USING XML INDEX idx_xCol FOR PATH Пример: получение свойств объекта Рассмотрим следующий запрос, который получает свойства "genre", "title" и ISBN книги из каждой строки в таблице T: SELECT xCol.value ('(/book/@genre)[1]', 'varchar(50)'), xCol.value ('(/book/title)[1]', 'varchar(50)'), xCol.value ('(/book/@ISBN)[1]', 'varchar(50)') FROM docs В этом случае можно использовать индекс свойств: CREATE XML INDEX idx_xCol_Property on docs (xCol) USING XML INDEX idx_xCol FOR PROPERTY Пример: запрос, основанный на значениях В следующем запросе ось потомков descendant-or-self (//) определяет частичный путь, поэтому индекс VALUE помогает выполнять поиск, основанный на значениях ISBN: SELECT xCol FROM docs WHERE xCol.exist ('//book[@ISBN = "1-8610-0157-6"]') = 1 Индекс VALUE создается следующим образом: CREATE XML INDEX idx_xCol_Value on docs (xCol) USING XML INDEX idx_xCol FOR VALUE Индексирование содержимого Вы можете создать полнотекстовый индекс на столбцах XML; это индексирует содержимое значений XML, игнорируя разметку XML. Значения атрибутов не входят в полнотекстовый индекс (так как они считаются частью разметки), и тэги элемента используются как разграничительные знаки. Вы можете создавать и индексы XML, и полнотекстовые индексы на столбце XML, и совмещать полнотекстовый поиск с использованием индекса XML. Используйте полнотекстовый индекс в качестве первого фильтра, чтобы уменьшить выборку и потом применить XQuery для дальнейшей фильтрации. Полнотекстовый поиск, использующий CONTAINS(), и contains() языка XQuery имеют разную семантику. Последний метод выполняет сравнение подстроки, а первый выполняет сравнение при помощи разграничительных знаков. Пример: создание полнотекстового индекса на столбце XML Шаги, требующиеся для создания полнотекстового индекса на столбце XML, не сильно отличаются от тех, которые выполняются для столбцов других типов. В основной базе необходим уникальный ключ на столбце. Ниже показаны команды DDL, в которых PK__docs__7F60ED59 - первичный ключ на одном столбце таблицы: CREATE FULLTEXT CATALOG ft AS DEFAULT CREATE FULLTEXT INDEX ON dbo.docs (xCol) KEY INDEX PK__docs__7F60ED59 Пример: совмещение полнотекстового поиска с запросами XML Следующий запрос проверяет, что значение XML содержит слово "Secure" в названии книги: SELECT * FROM docs WHERE CONTAINS(xCol,'Secure') AND xCol.exist('/book/title/text()[contains(.,"Secure")]') =1 Метод CONTAINS() использует полнотекстовый индекс для выборки из документа значений XML, которые содержат слово "Secure". Метод exist() проверяет, что слово "Secure" содержится в названии книги. Выполнение запроса с использованием индексов XML Индексы XML ускоряют выполнение запросов. Запросы всегда компилируются по первичному индексу столбца XML, если он существует. Один план выполнения создается для всего запроса (и для реляционной части, и для части XML), который оптимизируется при помощи оптимизатора запросов движка базы данных. Вторичные индексы XML выбираются для использования в соответствии с оценками затрат оптимизатора запросов. Каталожные представления для индексов XML Каталожные представления используются для просмотра индексов XML с типом индекса 3 (столбец "type"). В столбце "name" содержится название индекса XML. Индексы XML также находятся в каталожном представлении sys.xml_indexes, в котором содержатся все столбцы из sys.indexes и несколько дополнительных, имеющих отношение к индексам XML. Значение NULL в столбце "secondary_type" указывает на первичный индекс XML; значения 'P', 'R' and 'V' соответствуют вторичным индексам XML PATH, PROPERTY и VALUE. Использование пространства в индексах XML может быть проверено при помощи табличной функции sys.fn_indexinfo(). Функция возвращает такую информацию, как количество занятых страниц на диске, средний размер строки в байтах, количество записей, и другую информацию для индексов всех типов, включая индексы XML. Эта информация доступна для каждой секции базы данных; индексы XML используют ту же схему секционирования и функцию секционирования базовой таблицы. Пример: использование пространства в индексах XML SELECT sum(Pages) FROM sys.fn_indexinfo ('docs', 'idx_xCol_Path' , DEFAULT, 'DETAILED') Эта команда SELECT выводит количество страниц на диске, занятых индексом XML idx_xCol_Path в таблице T по всем секциям. Без функции sum() результат возвратил бы количество занятых страниц на диске по каждой секции. ПРОДОЛЖЕНИЕ СЛЕДУЕТ
Coding Standards Part 2 - Formatting Самые популярные темы недели
Ваше мнение об упражнениях SELECT на http://sql.ipps.ru
SQLMail + Outlook 2003 (не Exchange) Лучше вместе! Специальное предложение для покупателей Microsoft SQL Server 2000
|
#228<< #229 |
Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.winsoft.sqlhelpyouself |
Отписаться |
В избранное | ||