Кто-нибудь использует HierarchyId в реальном производстве с таблицами разумного размера, более нескольких тысяч строк? Это надежный / производительный? До сих пор я не нашел никого, кто не связан с продавцом, рекомендовал бы это, и Пол Нильсен советует против этого здесь .
Каков ваш опыт использования HierarchyId в реальных производственных системах?
Какие критерии вы использовали, когда выбирали HierarchyId вместо его альтернатив?
Это ответ на вопрос Кирка «почему бы не использовать его (HierarchyId)». По сравнению с материализованным путем, в некоторых важных случаях HierarchyId кажется менее производительным и менее удобным для работы.
Причина проста: цитата из комментария Microsoft к Connect : «Проблема в том, что вызовы CLR, включая методыierarchyID, непрозрачны для оптимизатора запросов. Это сделано специально. Однако это означает, что оценка количества элементов для них иногда может быть весьма неправильно."
С другой стороны, реализация материализованного пути очень проста в первый раз, когда нам нужно это сделать, и в следующий раз, по сути, это задача копирования и вставки. Таким образом, мы получаем более универсальное и более эффективное решение без особых усилий.
Поэтому я полностью согласен с Полом Нильсеном, который написал в своей превосходной книге «Библия Microsoft® SQL Server® 2008» следующее: «Новый HierarchyID не лишен противоречий. Он новый и получает много времени для прессы и демонстраций, но я» Я не уверен, что это проблема, которая нуждается в другом решении. "
источник
Моя компания использует HeirachyID для прямых продаж, многоуровневого программного обеспечения для маркетинга. Оно работает. Я действительно не делал никакой работы с этим, я просто знаю, что мы используем это.
Самая большая проблема, с которой я столкнулся, заключается в том, что мы выполняем циклы по уровням, а не на основе множества. В этой области это не очень хорошо для нас, но я не уверен, что это проблема с типом или нашей реализацией.
источник
Одна проблема с иерархией - вы получаете привязку к поставщику. Но я нашел отличную статью Адама Милаццо о том, как все работает внутри:
http://www.adammil.net/blog/view.php?id=100
Благодаря этому я смог написать скрипт Postgres для преобразования моего набора данных из MSSQL. Также включил его в скрипт, который я написал для импорта базы данных AdventureWorks в Postgres:
https://github.com/lorint/AdventureWorks-for-Postgres
Просто поищите "ierarchyid "в файле install.sql там, и вы скоро найдете ссылки на его преобразование.
источник
Наша команда внедрила его в производство, сначала производительность была хорошей, через 2 года таблица теперь содержит 430 000 строк, а getroot и getdecendent занимают 3 секунды, обе из них необходимы для вычисления следующего значения Id для вставки записи. Теперь вставка одного поддерева занимает около 16 секунд, что совершенно неприемлемо.
источник