Вопрос по деревьям - запрос выборки

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Вопрос по деревьям - запрос выборки

Сообщение Zhur » 24 май 2006, 17:11

Уважаемые.
Прочитал статью "Деревья в SQL".
В статье описана рекурсивная процедура, возвращающая для родительского узла все его дочерниеузлы.
Таким образо, что бы выбрать из таблицы эти узлы пишем запрос:

Код: Выделить всё

select A.* from MYTABLE A
join MYTABLE_CHILD(:ID,1) AC on A.ID=AC.ID
Появилась проблема следующего характера:
Как быбрать из всей таблицы узлы, наоборот, не принадлежащие это узлу (:ID)???
Сейчас написал так:

Код: Выделить всё

select A.* from MYTABLE A
where not A.ID in
  (select AC.ID from MYTABLE_CHILD(:ID,1) AC)
Очевидно, что такой запрос является гипер-медленным.
Может у кого есть идея, как оптимизировать данный запрос?
Заранее благодарен.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 25 май 2006, 07:58

Если тебе нужны выборки такого характера, я бы рекомендовал дерево с составным ключом. Там подобные запросы делаются влет с помощью LIKE.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 25 май 2006, 15:26

Dimitry Sibiryakov писал(а):Если тебе нужны выборки такого характера, я бы рекомендовал дерево с составным ключом. Там подобные запросы делаются влет с помощью LIKE.
А гд можно про это почитать поподробнее?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 25 май 2006, 15:34

А статью "Деревья в SQL" ты прочитал только ровно на треть?

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 25 май 2006, 15:44

Dimitry Sibiryakov писал(а):А статью "Деревья в SQL" ты прочитал только ровно на треть?
Ах... Вы имели в виду "Составной путь"?
Возможно, это может мне подойти... Надо обдумать все за и против.
Правда, мне придется кое-что сделать по другому.
Что ж спасибо. Что-то сразу не подумал.

Ответить