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

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Всем доброе время суток!

Идея типа hierarchyid конечно не плохая, но проблема у меня начинается с индексированием.
Сам индекс по полю создаётся, но когда начинаешь его использовать в иерархии необходима функция/метод

IsDescendantOf

Она соответствено не очень то индексирована.

Есть у меня в иерархической таблице ссылка на запись самого верхнего уровня. Когда я добавляю эту проверку - запрос значительно ускоряется (особенно в ветках с малым количеством записей).

Но совсем быстро работает когда

alter table dbo.tCommonDictionary
  add hrchIDStr as cast(hrchID as nvarchar(100)) persisted
go

create unique index idx_tCommonDictionary_hrchIDStr_pk
  on dbo.tCommonDictionary(hrchIDStr, pk)

.....

   --and cd.hrchID.IsDescendantOf(@h) = 1
   and cd.hrchIDStr like cast(@h as nvarchar(100)) + '%'


Естественно, во втором случае необходимо убедится что иерархия построена непрерывно бех /8.8/ (для этого только перестраивать дерево/ветку дерева).

Вопрос.
Что я делаю не так?! Как правильно использовать этот тип данных без "колхоза" с like-ом или дополнительным полем?!
3 май 12, 20:54    [12504235]     Ответить | Цитировать Сообщить модератору
 Re: Тип hierarchyid и индекс  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
NIIIK
IsDescendantOf - не очень то индексирована
hrchID.IsDescendantOf(@h) = 1
Как это?
Там практически запрос превращается в Seek Range:
hrchID > @h AND hrchID < @h.NextSibling()

Может дело в самом CLR? (будь он неладен)
Но что-то не верится.
4 май 12, 02:29    [12505277]     Ответить | Цитировать Сообщить модератору
 Re: Тип hierarchyid и индекс  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Mnior
NIIIK
IsDescendantOf - не очень то индексирована
hrchID.IsDescendantOf(@h) = 1
Как это?
Там практически запрос превращается в Seek Range:
hrchID > @h AND hrchID < @h.NextSibling()

Может дело в самом CLR? (будь он неладен)
Но что-то не верится.


Вы правы,
просто есть дополнительные условия и почему-то план запроса гораздо лучше был с like-ом

Сделал специальный индекс.
4 май 12, 13:09    [12507449]     Ответить | Цитировать Сообщить модератору
 Re: Тип hierarchyid и индекс  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Просто уточню как показано в плане:
Seek Keys[1]: Start: HID >= Scalar Operator([@H]); End: HID <= Scalar Operator([@H].DescendantLimit())
4 май 12, 14:50    [12508437]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить