Оптимизированный SQL для древовидных структур - PullRequest
35 голосов
/ 25 ноября 2008

Как бы вы получили древовидные данные из базы данных с наилучшей производительностью? Например, скажем, у вас есть папка-иерархия в базе данных. Где строка-папка-база данных имеет столбцы ID , Имя и ParentID .

Использовали бы вы специальный алгоритм для одновременного получения всех данных, минимизируя количество обращений к базе данных и обрабатывая их в коде?

Или вы бы использовали много обращений к базе данных и вроде бы получали структуру, сделанную непосредственно из базы данных?

Может быть, есть разные ответы в зависимости от количества строк в базе данных, глубины иерархии или чего-то еще?

Редактировать : Я использую Microsoft SQL Server, но интересны и другие перспективы.

Ответы [ 12 ]

0 голосов
/ 13 апреля 2016

Не будет работать для всех ситуаций, но, например, с учетом структуры комментария:

ID | ParentCommentID

Вы также можете хранить TopCommentID, который представляет самый верхний комментарий:

ID | ParentCommentID | TopCommentID

Где TopCommentID и ParentCommentID равны null или 0, когда это самый верхний комментарий. Для дочерних комментариев ParentCommentID указывает на комментарий над ним, а TopCommentID указывает на самого верхнего родителя.

0 голосов
/ 25 ноября 2008

Эта статья интересна тем, что в ней показаны некоторые методы поиска, а также способ сохранить происхождение как производный столбец. Происхождение предоставляет быстрый способ получения иерархии без слишком большого количества объединений.

...