SELECT와 UPDATE 명령문의 구성을 간단하게 만든다. 변경 명령문의 처리는 각 요소가 오직 한번만 기록되어 있기 때문에 아주 빠르다. SELECT 명령문의 처리는 이와는 다른 이야기. 만약 어떤 속성(열)이 한 테이블에만 오직 한번만 기록되어 있다면 많은 조인이 수행되어야한다.
조인 처리와 다른 SELECT 명령문은 많은 시간이 소요된다. 이러한 문제를 해결하는 한 방법은 테이블에 중복된 데이터를 포함시키는 것이다. 여기서 조인과 다른 SELECT 명령문의 예제를 보여주고 있는데, 중복된 데이터가 추가 되었을 때 아주 빠르게 수행할 수 있다.
지침 4 : SELECT 명령문의 실행 시간이 만족스럽지 않을 때에는 중복 데이터를 추가하라
mysql> select s.stu_name, c.cir_name
> from student s, circle c
> where c.stu_no= s.stu_no
mysql> select stu_name, cir_name
> from cicle
→ 2번째 예제가 훨씬 빠르게 실행될 것이다. 중복된 데이터를 추가하는 것을 비정규화라 한다. 비정규화의 단 점은 두개 이상의 위치에 동일한 요소를 기록하므로 기억 공간을 두배 이상 사용한다는 것이다. 비정규화를 사용할 때는 갱신의 실행시간이 더 느리고 필요한 기억 공간에 더 요구되지만 반대로 SELECT 명령문의 실행시간은 상당히 빠르므로 이들 간에 상대적 중요성을 고려해야한다.
열에 대한 자료형의 선택
데이터베이스의 설계는 각 열에 대한 자료형을 선택하는 작업도 포함된다. SELECT, UPDATE, DELETE 명령문에서 열은 다른 열과 비교된다.
지침 5 : 다른 열과 비교될 열의 자료형은 동일한 자료형을 사용해야한다.
성적 테이블의 신청학점과 취득학점이 같은 경우의 학번, 년도, 학기, 신청학점, 취득학점을 출력하라.
mysql> select stu_no, sco_year, sco_term, req_point, take_point
> from score
> where req_point =take_point;
지침 6 : 계산에 사용되는 열은 수치 자료형으로 지정하라.
만약 열에 있는 값을 계산해야 한다면 열은 수치 자료형으로 정의되어야 한다. 그렇지 않으면 계산이 불가능하게 된다. 전체적으로 수치로 구성된 특별한 코드를 기록하기 위해서는 수치 자료형을 열에 부여한다. 수치 열의 장점은 작은 크기의 기억공간을 요구한다는 것이다. 반면에 코드 체계는 아주 빈번하기 변하게 된다. 아마도 설계 과정에서 모든 코드는 수치로 사용되겠지만 항상 그런것은 아닐 것이다. 수치를 영수치 값으로 변환하는 것은 간단하지 않다. 따라서 수치 그 자체로 필요하다면 수치로서만 열을 정의한다.
지침 7 : 모든 영수치 열에 대하여 VARCHAR 자료형을 사용하지 않아야 한다.
MySQL은 CHAR, VARCHAR이라는 영수치 자료형을 제공한다. VARCHAR 자료형은 기억공간을 절약하기 위해서 설계되었다. 따라서 아주 유용하게 사용되지만, 사용에 있어서는 주의해야하는 경우가 있다. VARCHAR의 두 가지 단점이 있다.
① VARCHAR 열에 있는 각 값에 대하여 SQL은 내부적으로 값의 길이를 기록하고 있다. 이는 불필요한 기억 공간이 필요하게 된다.
② SELECT와 UPDATE 명령문에서 VARCHAR 열은 CHAR 열보다 아주 느리게 처리된다. 따라서 열을 CHAR로 정의 했을 때 사용하지 않는 공간이 적어도 15개 이상 될 때는 VARCHAR로 사용하는 것이 좋다.
지침 8: 열이 모든 행에 대하여 값을 가지고 있어야 할 때 NOT NULL을 사용하라
'DB > MySQL' 카테고리의 다른 글
MySQL 스토리지 엔진 MyISAM과 InnoDB의 차이점 (0) | 2012.03.27 |
---|---|
Mysql 유틸리티 (0) | 2012.03.27 |
Database 결정자(Determinant) (0) | 2012.03.27 |
데이터베이스 설계 지침 (0) | 2012.03.26 |
SQL 명령문의 최적화 (0) | 2012.03.21 |
댓글