powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / А вернемся к иерархиям
4 сообщений из 4, страница 1 из 1
А вернемся к иерархиям
    #35253063
PeshaShulc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня база, основные данные это директории файловой системы с их отношениями
скажем:
CREATE TABLE Dirs (ID int, ParentID int)
директорий может быть много. Часто нужно искать всех детей или всех родителей данной директории. И такой поиск является самым критичным запросом.
У меня уже реализована денормализация в виде вспомогательной таблицы, где я храню всех родителей для каждой директории. Таблица довольно тяжелая. Так как в среднем количество записей там растет как N*Log(N) где N количество директорий.
Сейчас решил попробовать реализовать "стек", как описано у Джое Селко. Экономия существенная так как хранить нужно для каждой директории всего два параметра (leftBound, rightBound), то есть 2*N
НО работает значительно медленнее.
...
Рейтинг: 0 / 0
А вернемся к иерархиям
    #35256203
Alexey Furmanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я скорость не сравнивал, но у меня работает очень шустро на нескольких тысячах записей (мелковато, конечно), реализацию брал здесь , правда в логике без бутылки не разберёшься, но с бутылкой (и с описанием, где-то там же лежит) - разберёшься :) непонимаю, где ты взял там выигрыш по памяти (4 инта вместо 2х + доп.2 индекса), там как раз скорость поиска всех детей должна увеличиться
у меня чуть структура другая только, типа так:
create table T_TREE
(id int not null auto_increment,
left_key int not null,
right_key int not null,
level int not null,
primary key (id)
)type = InnoDB;
create unique index left_idx on T_TREE(left_key);
create unique index right_idx on T_TREE(right_key);
create index level_idx on T_TREE(level);

возможно, ты что-то недоговариваешь...
---------------------------------------
Не шалю, никого не трогаю, починяю примус (С)
...
Рейтинг: 0 / 0
А вернемся к иерархиям
    #35256893
Фотография krazana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если у вас оракл - не надо ничего нигде хранить
попробуйте использовать конструкцию : connect by prior
почитать можно здесь :

http://www.adp-gmbh.ch/ora/sql/connect_by.html
...
Рейтинг: 0 / 0
А вернемся к иерархиям
    #35256972
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krazanaесли у вас оракл - не надо ничего нигде хранить
попробуйте использовать конструкцию : connect by prior
почитать можно здесь :

http://www.adp-gmbh.ch/ora/sql/connect_by.htmlЕсли MSSQL, то можно тоже использовать рекурсивные запросы.

Но это медленнее.

Если у вас запрос - выдать товары от заданнного места в дереве товарного справочника и ниже, а выше не должна быть выключена ни одна группа, и для пользователя в "деревянном" справочнике ценовых скидок нужно применить скидки как сумму вниз по дереву... Селко будет быстрее.

Вообще любые операции над множествами в ядре СУБД делаются быстрее, чем рекурсиво-процедурные циклы, хотя-бы они кратко и маскировались под connect by prior в оракле или with в MSSQL :-)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / А вернемся к иерархиям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]