Оптимизация представлений
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
astlan Участник
Вступление в Клуб: 30.01.2012
|
Пт Авг 15, 2014 12:12  Оптимизация представлений |
|
Полезность: Нет оценки
|
Есть такая вьюха, выполняется за доли секунды, с такими хинтами
Код: | SELECT /*+ NO_MERGE(VW_CRIT_FOLDER_PAY) */ ID,
CLASS_ID,
STATE_ID,
C_1,
TO_CHAR(C_2) C_2,
U_1,
.....................
FROM (SELECT /*+ ORDERED */ A1_1.Id "ID",
A1_1.CLASS_ID "CLASS_ID",
A1_1.STATE_ID "STATE_ID",
A1_2.C_DOCUMENT_DATE "C_1",
...........
)) VW_CRIT_FOLDER_PAY
WHERE ROWNUM <= :1
ORDER BY C_1 |
Если воспользоваться стандартным редактором в Администраторе словаря данных, и указать хинт напримет /*+ ORDERED */, то представление примет вид
Код: | SELECT ID,
CLASS_ID,
STATE_ID,
C_1,
TO_CHAR(C_2) C_2,
U_1,
.....................
FROM (SELECT /*+ ORDERED */A1_1.Id "ID",
A1_1.CLASS_ID "CLASS_ID",
A1_1.STATE_ID "STATE_ID",
A1_2.C_DOCUMENT_DATE "C_1",
...........
)) VW_CRIT_FOLDER_PAY
WHERE ROWNUM <= :1 |
и будет выполнятся около получаса, можно ли сохранить первый хинт /*+ NO_MERGE(VW_CRIT_FOLDER_PAY) */ и как? ? |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Авг 15, 2014 12:48   |
|
Полезность: Нет оценки
|
переписать представление как Представление PL/Plus, включить флаги не добавлять ID, не добавлять системные колонки, посмотреть кнопку "Оптимизация" |
|
 |
devor Профи
Вступление в Клуб: 13.02.2012
|
Пт Авг 15, 2014 13:02  Re: Оптимизация представлений |
|
Полезность: Нет оценки
|
astlan пишет: |
можно ли сохранить первый хинт /*+ NO_MERGE(VW_CRIT_FOLDER_PAY) */ и как? ? |
Создать расширение и воткнуть хинт в поле "Оптимизация" на закладке "Свойства". |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Пт Авг 15, 2014 13:59  Re: Оптимизация представлений |
|
Полезность: Нет оценки
|
astlan пишет: | Есть такая вьюха, выполняется за доли секунды, с такими хинтами
Код: | SELECT /*+ NO_MERGE(VW_CRIT_FOLDER_PAY) */ ID,
CLASS_ID,
STATE_ID,
C_1,
TO_CHAR(C_2) C_2,
U_1,
.....................
FROM (SELECT /*+ ORDERED */ A1_1.Id "ID",
A1_1.CLASS_ID "CLASS_ID",
A1_1.STATE_ID "STATE_ID",
A1_2.C_DOCUMENT_DATE "C_1",
...........
)) VW_CRIT_FOLDER_PAY
WHERE ROWNUM <= :1
ORDER BY C_1 |
Если воспользоваться стандартным редактором в Администраторе словаря данных, и указать хинт напримет /*+ ORDERED */, то представление примет вид
Код: | SELECT ID,
CLASS_ID,
STATE_ID,
C_1,
TO_CHAR(C_2) C_2,
U_1,
.....................
FROM (SELECT /*+ ORDERED */A1_1.Id "ID",
A1_1.CLASS_ID "CLASS_ID",
A1_1.STATE_ID "STATE_ID",
A1_2.C_DOCUMENT_DATE "C_1",
...........
)) VW_CRIT_FOLDER_PAY
WHERE ROWNUM <= :1 |
и будет выполнятся около получаса, можно ли сохранить первый хинт /*+ NO_MERGE(VW_CRIT_FOLDER_PAY) */ и как? ? |
Ну, хинт ordered наверное, можно убрать, если разместить таблички в обратном порядке.
А что делает хинт no_merge? не встречал раньше.
По теме могу предложить только сделать PL/PLUS-представление.
Там можно размещать хинты без всяких выкаблучиваний.
Код: |
type main is
SELECT /*+ NO_MERGE(алиас заранее неизвестен, но можно посмотреть по факту) */ a(
a%state,
b.C_1,
TO_CHAR(b.C_2) C_2,
.....................
) in (SELECT /*+ ORDERED */ b(b :ID,
b%CLASS :CLASS_ID,
b%STATE :STATE_ID,
b.[DOCUMENT_DATE] :C_1,
...........
)
ORDER BY b.C_1
| как-то так
Ещё можно попробовать указать оба хинта:
/*+ NO_MERGE(VW_CRIT_FOLDER_PAY) ORDERED */ |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|