Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 С какой версии появились селективные XML-индексы?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6178
Сабж. В документации написано "все поддерживаемые версии", но пока ещё вполне используются и 2005-й, и 2008-й, и в них этих селективных индексов нет. В 2014-м уже есть (а 2012-го у меня под рукой нет). Хотелось бы точно знать, с какой версии это существует.
Наличие проверяется легко: вот такой код
use tempdb
go
create table #t (
  id int identity not null primary key,
  xdata xml not null
)
go
insert into #t(xdata) values (N'<root/>');
go
create selective xml index tmp_xml_index on #t(xdata)
for(
  path_item = '/root' as xquery 'node()'
);
go
drop table #t
go

должен отработать без ошибок.
Спасибо.
24 апр 21, 14:53    [22313586]     Ответить | Цитировать Сообщить модератору
 Re: С какой версии появились селективные XML-индексы?  [new]
invm
Member

Откуда: Москва
Сообщений: 9725
Можно тут поискать - https://docs.microsoft.com/ru-ru/previous-versions/sql/
24 апр 21, 15:39    [22313607]     Ответить | Цитировать Сообщить модератору
 Re: С какой версии появились селективные XML-индексы?  [new]
aleks222
Member

Откуда:
Сообщений: 1352
Msg 9539, Level 16, State 1, Line 1
Selective XML Index feature is not supported for the current database version

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2012 (SP4-GDR) (KB4583465) - 11.0.7507.2 (X64)
Nov 1 2020 00:48:37
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: )
24 апр 21, 15:40    [22313608]     Ответить | Цитировать Сообщить модератору
 Re: С какой версии появились селективные XML-индексы?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1757
Сон Веры Павловны,

Вообще они должны быть доступны с 2012 версии.

https://docs.microsoft.com/ru-ru/previous-versions/sql/sql-server-2012/jj670104(v=sql.110)

там есть особенность что по умолчанию его использование на базе вырублено.
что бы можно было его использовать нужно пометить базу к его применению с помощью процедурки sp_db_selective_xml_index
24 апр 21, 15:46    [22313610]     Ответить | Цитировать Сообщить модератору
 Re: С какой версии появились селективные XML-индексы?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6178
aleks222, felix_ff,
понятно, спасибо.

И ещё вопрос, раз уж пошла такая пьянка. Согласно документации, есть ещё такая штука, как вторичный селективный xml-индекс (sys.xml_indexes.xml_index_type=3). Но что они из себя представляют, и как они создаются - не могу найти вообще никаких упоминаний. В той же документации - только описание и создание обычного селективного. Никому с вторичными селективными не доводилось иметь дело?
24 апр 21, 15:54    [22313614]     Ответить | Цитировать Сообщить модератору
 Re: С какой версии появились селективные XML-индексы?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1757
Сон Веры Павловны,

вторичный селективный xml индекс создается на основе существующего обычного селективного xml индекса, он используюет один из путей фильтра основного селективного индекса. по объему он меньше чем основной

вторичный xml индекс рассматривайте как ситуацию в отношении обычных реляционных класстерный - некластерный.
в данном случае вторичный xml индекс будет выступать в роли некластерного с фильтрующим предикатом

это видно даже по метаданным.

вот пример:
drop table if exists [dbo].[tbl_XML1], [dbo].[tbl_XML2]
create table [dbo].[tbl_XML1] ([RID] BIGINT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
                              [Date] DATETIME,
                              [XmlData] XML);

go
create selective xml index sxi_1 on [dbo].[tbl_XML1]([XmlData])
for (
    abc = '/a/b/c' as XQUERY 'node()',
    abc_val = '/a/b/c/text()' AS SQL INT
);
go

create xml index sxi_2 on [dbo].[tbl_XML1] ([XmlData])
USING XML INDEX sxi_1 for (
  abc_val
);
go


insert into [dbo].[tbl_XML1] values (getdate(), '
<root>
   <person>
      <name>Mark</name>
      <surName>Denver</surName>
      <age>30</age>
   </person>
</root>')

insert into [dbo].[tbl_XML1] values (getdate(), '
<a>
  <b id="1">
    <name>Mark</name>
    <c>30</c>
  </b>
  <val>100</val>
</a>
')


insert into [dbo].[tbl_XML1] values (getdate(), '
<a>
  <b id="2">
    <name>Adam</name>
    <c>35</c>
  </b>
  <b>
    <c id="30"/>
  </b>
  <val>100</val>
</a>
')


select object_name(o.parent_object_id) as [parent],
       o.type_desc + ' : ' + object_name(i.object_id) as [index_owner],
       i.name as [index_name],
       i.index_id,
       i.filter_definition, p.rows, i.index_id, i.has_filter, i.is_unique,
       i.type, o.schema_id, p.object_id, p.hobt_id, p.index_id, i2.name, i2.type_desc
from sys.indexes i
    left join sys.partitions p on p.object_id = i.object_id
    left join sys.objects o on o.object_id = i.object_id
    left join sys.indexes i2 on i2.object_id = p.object_id and i2.index_id = p.index_id
where i.name like 'sxi%'


по сути вторичный селективный xml индекс от просто вторичного xml индеса мало чем отличается, просто он строится по пути фильтра первичного селективного xml индеса, а вторичный xml индекс вместо ветки указывает одно из PATH/VALUE/PROPERTY но строится по всему дереву объектов xml документа. вобщем это аналоги реляционных некластерных индексов и фильтрованных некластерных индексов.

Сообщение было отредактировано: 24 апр 21, 16:44
24 апр 21, 16:43    [22313637]     Ответить | Цитировать Сообщить модератору
 Re: С какой версии появились селективные XML-индексы?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6178
felix_ff,

спасибо, понятно. Просто из документации не особенно явно следует, что в create xml index using - он не только для primary xml index, но и для существующего selective index.
24 апр 21, 18:00    [22313671]     Ответить | Цитировать Сообщить модератору
 Re: С какой версии появились селективные XML-индексы?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8587
Сон Веры Павловны,

"все поддерживаемые версии"
автор
но пока ещё вполне используются и 2005-й, и 2008-й

Эти версии сняты с поддержки, насколько я знаю.
25 апр 21, 23:34    [22314111]     Ответить | Цитировать Сообщить модератору
 Re: С какой версии появились селективные XML-индексы?  [new]
Sergey Syrovatchenko
Member

Откуда:
Сообщений: 175
Доступные селективные индексы начиная с 2012 SP1

Отдельно их включить нужно если устанавливался вначале RTM а потом на него сервис паки:

EXEC sys.sp_db_selective_xml_index @dbname = NULL, @selective_xml_index = 'ON'
GO
27 апр 21, 14:22    [22315090]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить