Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Union увеличивает кост  [new]
alienslon
Member

Откуда: оттуда
Сообщений: 154
Привет всем,
дано:

SELECT SERVICECODE
  FROM ACCOUNTSERVICES, ACCOUNTPRODUCTS
 WHERE SERVICECODE = 'ACB_MARKETRVOICE0'
   AND SUBPRODUCT = 'ACB_ROAM001'
   AND ACCOUNTSERVICES.ACCOUNTID = ACCOUNTPRODUCTS.ACCOUNTID
   AND ROWNUM < 2
UNION
SELECT SERVICECODE
  FROM ACCOUNTSERVICES
 WHERE SERVICECODE = 'ACB_MARKETRVOICE0'
   AND PRODUCTCODE = 'ACB_ROAM001'
   AND ROWNUM < 2



Plan
Plan
SELECT STATEMENT  ALL_ROWSCost: 340  Bytes: 69  Cardinality: 2  					
	9 UNION-ALL  				
		6 COUNT STOPKEY  			
			5 HASH JOIN  Cost: 339  Bytes: 167 K  Cardinality: 4 K  		
				2 TABLE ACCESS BY INDEX ROWID TABLE ALON2.ACCOUNTSERVICES Cost: 278  Bytes: 83 K  Cardinality: 4 K  	
					1 INDEX RANGE SCAN INDEX ALON2.ACCOUNTSERVICES_IXSCODEPCODE Cost: 3  Cardinality: 4 K  
				4 TABLE ACCESS BY INDEX ROWID TABLE ALON2.ACCOUNTPRODUCTS Cost: 60  Bytes: 167 K  Cardinality: 9 K  	
					3 INDEX RANGE SCAN INDEX ALON2.ACCOUNTPRODUCTS_IXSUBPROD Cost: 3  Cardinality: 9 K  
		8 COUNT STOPKEY  			
			7 INDEX RANGE SCAN INDEX ALON2.ACCOUNTSERVICES_IXSCODEPCODE Cost: 2  Bytes: 79 K  Cardinality: 3 K  		 		


Когда смотрю планы поотдельности этих двух скюл то кост очень маленький
1.
Plan
SELECT STATEMENT  ALL_ROWSCost: 2  Bytes: 40  Cardinality: 1  				
	6 COUNT STOPKEY  			
		5 NESTED LOOPS  		
			3 NESTED LOOPS  Cost: 2  Bytes: 40  Cardinality: 1  	
				1 INDEX SKIP SCAN INDEX (UNIQUE) ALON2.ACCOUNTPRODUCTS_PKIDPRDSUB Cost: 1  Bytes: 60  Cardinality: 3  
				2 INDEX RANGE SCAN INDEX ALON2.ACCOUNTSERVICES_IXACCTID Cost: 1  Cardinality: 3  
			4 TABLE ACCESS BY INDEX ROWID TABLE ALON2.ACCOUNTSERVICES Cost: 1  Bytes: 20  Cardinality: 1  	


2.
Plan
SELECT STATEMENT  ALL_ROWSCost: 1  Bytes: 29  Cardinality: 1  		
	2 COUNT STOPKEY  	
		1 INDEX RANGE SCAN INDEX ALON2.ACCOUNTSERVICES_IXSCODEPCODE Cost: 1  Bytes: 58  Cardinality: 2  


Когда вставляю в UNION кост нереально увеличивается до 340.
Может кто сталкивался?
Спасибо.
30 янв 14, 18:04    [15496346]     Ответить | Цитировать Сообщить модератору
 Re: Union увеличивает кост  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
alienslon,
видимо это ужасно страшно) а зачем тебе тут distinct?)
30 янв 14, 18:19    [15496421]     Ответить | Цитировать Сообщить модератору
 Re: Union увеличивает кост  [new]
outer join
Guest
alienslon,

Судя по запросу, вам нужно внешнее соединение.
30 янв 14, 18:32    [15496482]     Ответить | Цитировать Сообщить модератору
 Re: Union увеличивает кост  [new]
alienslon
Member

Откуда: оттуда
Сообщений: 154
Если заменяю UNION на UNION ALL
кост падает на 3 пункта


Plan
SELECT STATEMENT  ALL_ROWSCost: 340  Bytes: 69  Cardinality: 2  					
	9 UNION-ALL  				
		6 COUNT STOPKEY  			
			5 HASH JOIN  Cost: 339  Bytes: 167 K  Cardinality: 4 K  		
				2 TABLE ACCESS BY INDEX ROWID TABLE ALON2.ACCOUNTSERVICES Cost: 278  Bytes: 83 K  Cardinality: 4 K  	
					1 INDEX RANGE SCAN INDEX ALON2.ACCOUNTSERVICES_IXSCODEPCODE Cost: 3  Cardinality: 4 K  
				4 TABLE ACCESS BY INDEX ROWID TABLE ALON2.ACCOUNTPRODUCTS Cost: 60  Bytes: 167 K  Cardinality: 9 K  	
					3 INDEX RANGE SCAN INDEX ALON2.ACCOUNTPRODUCTS_IXSUBPROD Cost: 3  Cardinality: 9 K  
		8 COUNT STOPKEY  			
			7 INDEX RANGE SCAN INDEX ALON2.ACCOUNTSERVICES_IXSCODEPCODE Cost: 2  Bytes: 79 K  Cardinality: 3 K  		
30 янв 14, 18:36    [15496504]     Ответить | Цитировать Сообщить модератору
 Re: Union увеличивает кост  [new]
K790
Member

Откуда:
Сообщений: 633
alienslon,

да тут многие сталкивались с олимпиардными значениями костов. зачем Вам вообще это значение, как Вы его понимаете и для чего используете ?
30 янв 14, 18:44    [15496553]     Ответить | Цитировать Сообщить модератору
 Re: Union увеличивает кост  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
alienslon,
насчет union all была шутка.
Вы до сих пор не видите проблему? она же в планах явно видна.... надо смотреть почему план поменялся...
30 янв 14, 18:45    [15496562]     Ответить | Цитировать Сообщить модератору
 Re: Union увеличивает кост  [new]
Объединитель множеств
Guest
Как вам уже правильно заметили, UNION вам здесь не нужен, достаточно outer join' а.

И, отвечая на ваш вопром — в том, что UNION (объединение множеств с устранением дубликатов) увеличивает стоимость, сталкивались все, так как это вполне закономерное и очевидное явление.
30 янв 14, 18:46    [15496567]     Ответить | Цитировать Сообщить модератору
 Re: Union увеличивает кост  [new]
alienslon
Member

Откуда: оттуда
Сообщений: 154
Проблему я вижу и вижу что менятся план первого скюл - оптимизатор выбирает range scan по индексу с плохим
clusterin factor .

Вопрос почему оптимизатор меняет план в связке с UNION.
30 янв 14, 19:22    [15496725]     Ответить | Цитировать Сообщить модератору
 Re: Union увеличивает кост  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
alienslon,
ответ патамучта. вопрос должен был быть как сделать так чтобы планы совпадали.
31 янв 14, 10:04    [15498507]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить