레이블이 데이버베이스인 게시물을 표시합니다. 모든 게시물 표시
레이블이 데이버베이스인 게시물을 표시합니다. 모든 게시물 표시

2015년 10월 30일 금요일

데이터베이스 설계와 구축

-PK 컬럼순서도 중요하다?

: where , join 절에서 인덱싱을 타기위한  pk 인덱스 순서도  중요하다.

복합인덱스의 경우에도 단순 스칼라 비교값이 먼저배치하고 between 등과 같은 연산이 필요한 컬럼등은 뒤로 배치하면 인덱스범위가 앞에서 부터 줄어든다.

-식별자와 비식별자

: 테이블을 식별자로만 설계하면 테이블간 강한 연결관계가 되어, 자식의 PK 에는 항상 부모의 PK 식별자가 있어야한다. 따라서 자식테이블에서는 식별자로만으로도 데이터를 얻어오는게 가능하다
:비식별자로만 되어 있으면 약한 연결관계가 되는데, 자식테이블은 부모테이블의 PK에 상관없이  선언하기 때문에, 자식은PK선언에 ㅂ비교적 독립적이며 자식테이블에서 자료를 얻어낼려면 부모와의 조인참조가 필요하다.

- Transaction

: ACID(Atomicity, Consistency, Isolation, Durability)
A: 업무를 처리하는 최소의 단위별로 작업해야 한다.
C:일관성
I:독립성(Lock 기능)
D:영구성

-정규화 와 반정규화...

: 중요하다..쩝..

작업중

2015년 10월 28일 수요일

실전사례로 보는 SQL튜닝방법-인사이트

SQL 튜닝 배우자.

정규화 반정규화도 튜닝 작업의 일환이다.

인덱스만 잘타도 기본적인 튜닝작업이 된다.

이 책은 인덱스로 시작해서 인덱스로 끝난다.ㅋ
실전사례는 많아서 좋다.

-옵티마이져

Parsing 에 대한 적절한 실행계획을 세우는것.

:Soft Parsing : SQL을 실행한 적이 있는지 메모리에서 검사해서 기존방식대로 실행하여 처리는것.
Hard Parsing : SQL에서 사용하고 있는 객체들에 대한 접근권한체크후 어떤 방식으로 처리할것인지 실행계획을 세우는 것

-옵티마이져 종류

1.규칙기반 (Rule Base Optimizer , ROB): 특정 규칙을 기반으로 실행계획을 세우는 방법
:Rank(1~15) 에 정해진 우선순위대로 규칙을 적용한다.
-힌트를 사용할수 없다.
-HASH JOIN 을 사용할수 없다.
-Partitioned table, iot, reverse key index , function based index등은 사용할수없다.
이러한 제약때문에 Oracle10g 부터는 규칙기반 옵티마이져를 사용하지 않는다.

2.비용기반 (Cose Base Optimize , COB): SQL 의 비용을 계산해서 최소의 비용(cost) 로 처리할수 있는 계획을 세우는 방법

---

 

---

힌트의 사용
임시로 적용해 보는 몇가지 힌트를 통해 튜닝에 도움을 줄수있다.

/*+ ALL_ROWS */ : 최소한의 자원을 최대로 빨리 가져오는 실행계획을 세운다.
/*+ INDEX(table_name index_name)*/ : 특정 인덱스를 사용하거나,  NO_INDEX 를 통해 인덱스를 사용하지 않는 결과를 본다.
( /*+ INDEX_ASC(table_name index_name)*/ 와 /*+ INDEX_DESC(table_name index_name)*/) 도 있음.
/*+ FULL(table_name) */ : FULL SCAN  하고자 할때 쓰인다. Index scan 하고의 비교 검증용이다.
/*+ INDEX_FFS(table_name index_name) */ : index fast full scan 을 유도한다. 컬럼들이 모두 인덱스에 있을때, 인덱스만으로도 검색이 가능한경우.

/*+ ORDERRED */ : 무조건 from 절에서 나열한 테이블 순서대로 처리를 진행한다. join 쿼리의 경우 순서도 영향을 끼지기 때문이다.
/*+ LEADING(table1 table2...) */ : 명시된 테이블 순서대로 처리한다.

/*+ USE_NL(table1 table2...) */ : nesteed loop join 을 사용한다.(!= NO_USE_NL)
/*+ USE_HASH(table1 table2...) */ : hash join 을 사용한다.

/*+ USE_CONCATE */ :조건절의 OR 를  UNION ALL 형식으로 변형하여 실행한다.(!= NO_EXPAND)
/*+ MERGE */ : 뷰가 메인쿼리와 merge 되지 않을때 강제로 merge 한다. (!= NO_MERGE)
/*+ UNNEST */ : 서브쿼리와 메인쿼리를 하나의 조인형태로 한다.(!= NO_UNNEST)

2015년 8월 17일 월요일

mysql replication 설명

http://gywn.net/2012/03/mysql-replication-3/