Оптимизация представлений 
	   
	     | 
   
 
	
		| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		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 */ | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |