CftClub.ru
Клуб специалистов ЦФТ-Банк

Оптимизация представлений

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 */
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru