powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Схема с NESTED TABLES работает непозволительно медленно.
1 сообщений из 1, страница 1 из 1
Схема с NESTED TABLES работает непозволительно медленно.
    #32076912
Проблема
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В обычной схеме две таблицы PARENT_TABLE и CHILD_TABLE связаны через столбец OBJECT_ID.
Например, хочется найти те строки PARENT_TABLE, у которых в CHILD_TABLE в столбце COLUMN
есть значения 1 и 2.
Один из возможных вариантов (вариант 1):
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT PT.* 
FROM PARENT_TABLE PT, CHILD_TABLE CH1, CHILD_TABLE CH2
WHERE PT.OBJECT_ID  = CH1.OBJECT_ID
AND   CH1.OBJECT_ID = CH2.OBJECT_ID
AND   CH1.COLUMN =  1 
AND   CH2.COLUMN =  2 ;

или (вариант 2)

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT PT.* 
FROM PARENT_TABLE PT
WHERE
 1  IN (SELECT CH.COLUMN FROM CHILD_TABLE WHERE CH.OBJECT_ID = PT.OBJECT_ID)
AND   
 2  IN (SELECT CH.COLUMN FROM CHILD_TABLE WHERE CH.OBJECT_ID = PT.OBJECT_ID);


Увидел я NESTED TABLES и сделал схему со встроенной таблицей,
где поиск, получается, должен выглядеть так (вариант 1):

Код: plaintext
1.
2.
3.
4.
5.
SELECT PT.* 
FROM PARENT_TABLE PT, TABLE(PT.CHILD_TABLE) CH1, TABLE(PT.CHILD_TABLE) CH2
WHERE 
AND CH1.COLUMN =  1 
AND CH2.COLUMN =  2 ;


или (вариант 2)

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT PT.* 
FROM PARENT_TABLE PT
WHERE
 1  IN (SELECT CH.COLUMN FROM TABLE(PT.CHILD_TABLE))
AND   
 2  IN (SELECT CH.COLUMN FROM TABLE(PT.CHILD_TABLE))


Как сказал выше, схема с NESTED TABLES ищет очень долго.
Встроенная таблица является INDEX-ORGANIZED, естественно проиндексирована
по NESTED_TABLE_ID и COLUMN.
ALWAYS_SEMI_JOIN (как рекомендует документация) ставил и MERGE, и HASH. Всё без толку.
Статистика по таблицам собрана и оценена.
EXECUTE PLAN для варианта 1 выглядит так:

Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE
0 MERGE JOIN
0 SORT (JOIN)
0 NESTED LOOPS
0 INDEX GOAL: ANALYZED (RANGE SCAN) OF
'PROPERTIES_NESTED_VALUE_ID' (NON-UNIQUE)
0 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF
'GLOBAL_OBJECT_NESTED'
0 INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'SYS_C007194'
(UNIQUE)
0 SORT (JOIN)
0 INDEX GOAL: ANALYZED (RANGE SCAN) OF
'PROPERTIES_NESTED_VALUE_ID' (NON-UNIQUE)

На обычной "плоской" схеме всё работает более-менее терпимо.
Во "встроенной" надолго зависает. Содержимое таблиц одно и то же.
Может есть какой-нибудь хитрый синтаксис для схем со встроенными таблицами?
Или бросить её нафиг, а?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Схема с NESTED TABLES работает непозволительно медленно.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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