시소당
조인이 풀리는 테이블의 순서를 조정함으로서 소트된 결과를 구할 수 있다.
인덱스가 이미 소트되어 있다. Order by문의 컬럼순서 대로 인덱스를 만든다. 또한 From절의 먼순서부터 풀리므로 테이블의 순서를 조정하여 먼저 풀려야할 테이블을 조정한다.
 데이터복제를 이용한 Summery정보 계산
어떤 지점의 수신, 여신, 신탁총액을 구한다.
Select b.br_no, b.br_name, sum(a.r_amt), sum(a.a_amt), sum(a.i_amt)
From daily_trans a, branch b
Where a.br_no = b.br_no and a.saledate = :saledate
Group by b.br_no, b.br_name
이 sql은 조인을 먼저한 후 그 결과를 Group by하므로 횟수가 a.br_no = b.br_no건 수 만큼이나 된다. 그러나 Group by를 먼저하고 그 결과를 조인하면 성능이 향상된다.
Select b.br_no, b.br_name, ramt, aamt, iamt
From (select br_no,
Sum(r_amt) as ramt,
Sum(a_amt) as aamt,
Sum(I_amt) as iamt,
From daily_tans
where saledate = :saledate
Group by br_no) v, branch b
Where v.br_no = b.br_no;
전체총계와 함께 나오는 sql
Select b.br_no, b.br_name, ramt, aamt, iamt
From (select br_no,
Sum(r_amt) as ramt,
Sum(a_amt) as aamt,
Sum(I_amt) as iamt,
From daily_tans
where saledate = :saledate
Group by br_no
Union all
Select ‘total’ as br_no, sum(r_amt) as ramt,
Sum(a_amt) as aamt,
Sum(I_amt) as iamt,
From daily_tans where saledate = :saledate
where saledate = :saledate) v,
branch b
where v.br_no = b.br_no(+);
- tip
모델링시 슈퍼-서브타입의 경우 분리를 할 경우는 양쪽모두를 체크해야 하는데 이는 or, union, union all등을 써야 하기 때문에 성능을 저하시킨다.
 반정규화
코드테이블이 분리되어 있어서 조인이 이루어 지는데 예를들어 지역별 날짜별 어떤 합계를 구하려한다면 없는 국가코드를 조인해야 함으로(outer join)부담이 된다. 이를 해결하기 위해서 코드 테이블을 분리하고 이에대한 코드, 코드이름을 관련된 테이블에 중복시키다.