Форум: "Базы";
Текущий архив: 2003.01.02;
Скачать: [xml.tar.bz2];
ВнизCONNECT BY PRIOR ID = PARENT Найти похожие ветки
← →
EternalWonderer (2002-12-10 17:26) [0]Задача: получить иерархическое представление с упорядочением по алфавиту внутри каждой ветви.
Имеем две таблицы, оччень похожие, структура:
CREATE TABLE CATALOG_SI
(
ID NUMBER(4) NOT NULL,
PARENT NUMBER(4),
CAPTION VARCHAR2(50) NOT NULL,
...
CREATE UNIQUE INDEX CATALOG_SI_PK0 ON CATALOG_SI (ID)
CREATE UNIQUE INDEX CATALOG_SI_UC1 ON CATALOG_SI
(PARENT, CAPTION)
При выполнении запроса
SELECT ID, (LEVEL - 1) l_parent, caption, is_type
FROM catalog_si
START WITH PARENT = 0
CONNECT BY PRIOR ID = PARENT
Первая таблица выводит строки как надо (см. задачу), а вторая - как попало (видимо, в порядке ввода), зараза, пока в запрос не добавишь строку вида
/*+ INDEX (CATALOG_si CATALOG_si_UC1) */
План запроса без хинта:
SELECT STATEMENT Hint=CHOOSE
CONNECT BY
INDEX FAST FULL SCAN CATALOG_SI_UC1
TABLE ACCESS BY USER ROWID CATALOG_SI
TABLE ACCESS FULL CATALOG_SI
С хинтом:
SELECT STATEMENT Hint=CHOOSE
CONNECT BY
INDEX FAST FULL SCAN CATALOG_SI_UC1
TABLE ACCESS BY USER ROWID CATALOG_SI
TABLE ACCESS BY INDEX ROWID CATALOG_SI
INDEX RANGE SCAN CATALOG_SI_UC1
Вопрос 1: отчего первой таблице НЕ требуется хинт? (впрочем, ответ, похоже, очевиден: оптимизатор выбирает разные планы запроса - он же не знает, что мы хотим по афавиту, и для первой таблицы, видимо, у него это получается случайно :)
Вопрос 2: есть ли другой, более "правильный" способ решения задачи (поскольку мне не нравится это самое случайно)?
← →
petr_v_a (2002-12-10 17:49) [1]До 9-й версии способа нет (:
9-ю версию кроме самых отчаянных никто на живых данных пока не использует :)
Лично я в подобных ситуациях сортирую потом в TreeView на клиенте, "случайностям" не доверяю, но это мой подход, его не навязываю
← →
Sergey13 (2002-12-11 11:58) [2]EternalWonderer (10.12.02 17:26)
Поглянь сюда. Похоже.
http://www.sql.ru/forum/actualthread.aspx?bid=3&tid=17699
← →
EternalWonderer (2002-12-11 16:37) [3]petr_v_a © (10.12.02 17:49)
..."случайностям" не доверяю...
Отлично, мы сходимся во мнениях. Замечу, что сортировка дерева на клиенте - весьма длительная процедура при определённых условиях... Однако при использовании указанного хинта и вторая таблица у меня выводится "как надо".
Отсюда вопрос: это случайность или правило?
Или по - другому: если я буду применять этот хинт во всех случаях, буду ли я получать гарантированно ожидаемый результат?
Sergey13 © (11.12.02 11:58)
Поглядел. Для 9 версии - ясно. Но для 8i лучше я буду пока обходиться хинтами, если, конечно, это даёт гарантию правильного результата (см. выше).
← →
petr_v_a (2002-12-11 19:31) [4]>EternalWonderer (11.12.02 16:37)
>Отсюда вопрос: это случайность или правило?
Все, что явно не описано в документации или в "нотах" техподдержки - случайность, хотя бы и похожая на закономерность, IMHO
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c