SPATIUM Desktop
주소복사
About Operating System Languages Tools Favorites Notice Visit TEST  
     ADK (3)
     android (3)
     ASP (5)
     ASP.Net (1)
     C# (5)
     HTML (9)
     JAVA (7)
     JavaScript (9)
     jQuery (5)
     Mobile Web (2)
     node.js (1)
     Oracle (8)
     PHP (7)
     Spring Framework (4)
     SQL (17)
     WPF (5)
   ID  
   Password  
  |  
  Location United States
  IP Address 35.173.48.18
2024. 10
12345
67891011
12
13141516171819
20212223242526
2728293031
Category  Languages, Oracle
Writer 김태우 Date 2015-07-16 17:31:23 Visit 3953
비용계산방법
 
 

비용계산방법

 
ANALYZE TABLE EC_APPLY COMPUTE STATISTICS;
ANALYZE INDEX EC_APPLY_COMPANY_IDX COMPUTE STATISTICS;
 

1) FTS

COST = 전체블록수/DB_FILE_MULTIBLOCK_READ_COUNT
 
SELECT TABLE_NAME, BLOCKS FROM USER_TABLES 
WHERE TABLE_NAME='EC_APPLY'; --> RESULT : 13474 BLOCKS
SHOW PARAMETER DB_FILE_MULTIBLOCK_READ_COUNT  --> RESULT : 8
COST = 13474/8 = 1684.25 (약 1685번) 검색으로 전체 데이터 검색
 

2) INDEX SCAN

COST = 1/선택도*클러스터링팩터
 
선택도 : 전체행에 대한 WHERE 조건절에 의해 검색되는 행의 비율
SELECT DISTINCT COMPANY_NO FROM EC_APPLY; --> RESULT : 2800 ROW
클러스터링팩터:하나의 인덱스가 몇개의 블록에 저장되어 있는지 나타내는 비율
SELECT INDEX_NAME, CLUSTERING_FACTOR FROM USER_INDEXES
WHERE INDEX_NAME = 'EC_APPLY_COMPANY_IDX'; --> RESULT : 79816
 
COST = 1/2800*79816 (약 29번) 검색으로 인덱스를 읽었음
 
set autot on
SELECT * FROM EC_APPLY WHERE COMPANY_NO = '6208100119';
 

<<COST 용어>>

1. selectivity

행집합으로부터의 행들의 일부분 검색 을 나타냄
0.0 ~ 1.0
0.0 : 아무값도 없음
1.0 : 모든행 선택
(1) where ename = '홍길동'  
(2) where ename like '홍%' 
(1)번보다 (2)이 더 많은 값 검색
 
selectivity는 해당 컬럼의 유일 값(distinct value)의 갯수에 따라 반비례하여 설정된다.
즉 distinct 값이 많으면 조건에 의해서 선택되는 값은 줄어듬.
 

2. cardinality 

행집합에서 행의 수 (행집합은 기본테이블, 뷰, 조인, group by의 결과일 수도 있음)
 
(1)base cardinality : 테이블을 분석하면 나타남(통계정보생성)
 
(2)effective cardinality : 기본테이블로부터 선택되어진 행의 수
(조건절에 의한 행을 의미함, 조건절이 없으면 effective와 base cardinality는 같음)
 
(3)join cardinality : 두행 집합이 함꼐 조인되었을때 생산된 행의 수
(조인조건의 selectivity에 의해 곱해진 두행 집합의 cardinality곱)
 
(4)distinct cardinality : 행집합의 컬럼에 유일한 값의 수
 
(5)group cardinality : group by  연산 후에 행집합에서 생성된 행의 수. 
group by는 행의 수를 줄여줌. distinct cardinality와 행집합의 행의 수에 의존적으로 변경됨. 그룹컬럼이 하나라면 그 컬럼의 distinct card와 같음, 그러나 그룹컬럼이 두개 이상이라면 최대 각컬럼의 distinct card가 되고, 최소는 각컬럼의 distinct card의 곱에서 행집합의 행의 수로 제한된다.결과는 총 행집합의 행의수보다 무조건 작으므로 distinct card가 가장 낮은 컬럼의 값과 행집합의 수 사이로 결정됨)
 
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO = 7369; ->UNIQUE이므로 COST = 1, 1건의 ROW이므로 CARD=1
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO IN (7369,7654); ->UNIQUE이므로 COST = 1, 2건의 ROW이므로 CARD=2
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO IN (7369,7654,7788);->UNIQUE이므로 COST = 1, 3건의 ROW이므로 CARD=3
SELECT EMPNO, ENAME FROM EMP WHERE EMPNO IN (7369,7654,7788,7900);->UNIQUE이므로 COST = 1, 4건의 ROW이므로 CARD=4
 
 
 
 
 
Tags  비용계산방법,FTS,INDEX SCAN,COST,selectivity,cardinality
  Relation Articles
[Languages-Oracle] 비용계산방법 (2015-07-16 17:31:23)
  Your Opinion
Member ID
150 letters
Copyright (C) SPATIUM. All rights reserved.
[SPATIUM]WebMaster Mail