powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Пробиться хинтом сквозь вьюшку
4 сообщений из 4, страница 1 из 1
Пробиться хинтом сквозь вьюшку
    #32149614
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал один топик, насчёт того, что имя таблицы в хинте должно появляться именно в таком виде, как оно указано в FROM. Т.е. если там алиас, то в хинт идёт алиас.\r
\r
Теперь вопрос -- а если у меня в FROM стоит выборки из представления?\r
То есть, есть view типа\r
Код: plaintext
1.
2.
3.
4.
CREATE VIEW SOME_TABLE_R as\r
SELECT CENTRE, CRD_F, FIELD1, ...\r
FROM SOME_TABLE ST\r
WHERE CENTRE IN \r
(SELECT CENTRE FROM CENTRE_USERS WHERE CU=USERNAME) 
\r
и есть запрос \r
Код: plaintext
1.
2.
3.
SELECT  /*+INDEX(C st_ind1)*/  *\r
FROM SOME_TABLE_R C\r
WHERE C.CENTRE = \'AAAA\' AND C.CRD_F>= :d2 \r
ORDER BY CRD_F;
\r
\r
Вопрос -- что нужно указывать в хинте: A, C, SOME_TABLE или SOME_TABLE_R.\r
Сколько пробовал -- у меня на 8.1.7.4.0 на HP-UX при указании в хинте "C" индекс используется, а у клиента, на 8.1.7.4.0, но Солярисе, всё сваливается на HASH_JOIN и выбирает совершенно непрогнозируемый набор...
...
Рейтинг: 0 / 0
Пробиться хинтом сквозь вьюшку
    #32149625
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маленькое допонение:
Индекс st_ind1 по CENTRE + CRD_F. Оба поля VARCHAR, но содержат только цифры.

Сортировка идёт по CENTRE, CRD_F , а не просто по CRD_F.
...
Рейтинг: 0 / 0
Пробиться хинтом сквозь вьюшку
    #32149634
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zapros bydet razvernut::
SELECT *
FROM
( SELECT CENTRE, CRD_F, FIELD1, ...
FROM SOME_TABLE ST
WHERE CENTRE IN
(SELECT CENTRE FROM CENTRE_USERS WHERE CU=USERNAME)) C
WHERE C.CENTRE = 'AAAA' AND C.CRD_F>= :d2
ORDER BY CRD_F;

Poetomy logichnei sdelat'::


SELECT /*+ LEADING ( SOME_TABLE) PUSH_SUBQ INDEX(SOME_TABLE, st_ind1)*/
C.*
FROM SOME_TABLE_R C
WHERE C.CENTRE = 'AAAA' AND C.CRD_F>= :d2
ORDER BY C.CRD_F;
...
Рейтинг: 0 / 0
Пробиться хинтом сквозь вьюшку
    #32149679
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(В сторону) ... мой русский становится всё ужасней и ужасней :)

2 Oracle X-pert: Спасибо за объяснение. Единственное, я не совсем понял, а зачем ему PUSH_SUBQ -- план в обоих случаях (с ним и без) был одинаковым...

Впрочем, в приложении всё решили другим путём -- прижали через +RULE и всё тоже заработало как надо.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Пробиться хинтом сквозь вьюшку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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