블로그 이미지
신비마마

태그목록

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

'Programer Life'에 해당되는 글 53

  1. 2009.03.12 오라클 힌트 사용 예제
  2. 2009.03.11 식별자관계와 비식별자관계
  3. 2009.03.11 PK 컬럼 순서의 중요성

오라클 힌트 사용 예제

2009. 3. 12. 19:37 | Posted by 신비마마
오라클 힌트(Hint) 사용 예제
SQL*Plus로 scott 계정으로 로그인한 후 emp 라는 테이블을 만들어 실습을 합니다.

SQL> create table test (
  2  id number not null primary key,
  3  name varchar2(20)
  4  );

테이블이 생성되었습니다.


데이터는 5건 넣는데 순서를 잘 보시기를 바랍니다.
기본적으로 select하면 넣은 순서대로 나옵니다.

SQL> insert into test values  (4,'4길동');

1 개의 행이 만들어졌습니다.

SQL> insert into test values  (3,'3길동');

1 개의 행이 만들어졌습니다.

SQL> insert into test values  (5,'5길동');

1 개의 행이 만들어졌습니다.

SQL> insert into test values  (1,'1길동');

1 개의 행이 만들어졌습니다.

SQL> insert into test values  (2,'2길동');

1 개의 행이 만들어졌습니다.

SQL> select * from test;

        ID NAME
---------- --------------------
4        4길동
3        3길동
5        5길동
1        1길동
2        2길동

그래서 이름으로 정렬하여 볼려면...
(그런데 order by는 사용하지 말라고 권고 하고 있죠.. .별도의 소트를 위한 공간을 이용하여 데이터를 정렬하므로 대량의 데이터일땐 DB에겐 OverHead 가 있는거죠... .)

SQL> select * from test order by name;

        ID NAME
---------- --------------------
1        1길동
2        2길동
3        3길동
4        4길동
5        5길동

이 경우 인덱스를 이용하면 쉽게 정렬된 데이터를 볼 수가 있습니다.
(멋지죠^^)

SQL> create index idx_test_name on test(name);

인덱스가 생성되었습니다.

SQL>select /*+index(TEST,IDX_TEST_NAME)*/ name from test
where name is not null;
        ID NAME
---------- --------------------
         1 1길동
         2 2길동
         3 3길동
         5 3길동
         4 4길동


그럼 이번에는 이름 역순으로 데이터를 가지고 올려고 합니다.
어떻게 할까요.. 아래처럼 order by를 descending으로 할까요...?

SQL> select * from test order by name desc;

        ID NAME
---------- --------------------
         4 4길동
         3 3길동
         5 3길동
         2 2길동
         1 1길동


이럴때 힌트라는 것을 이용하면 쉽게 해결할 수가 있습니다...

SQL> select /*+ index_desc (test, idx_tes_name) */ *
  2  from test
  3  where name is not null;

        ID NAME
---------- --------------------
         1 1길동
         2 2길동
         3 3길동
         5 3길동
         4 4길동

식별자관계와 비식별자관계

2009. 3. 11. 12:58 | Posted by 신비마마
문제점.

1. 식별자관계만을 이용하여 데이터 모델링을 전개할 경우, PK 속성의 숫자가 증가할 수록 관련된 SQL 구문이 복잡해져 복잡성으로 인한 개발 오류를 유발.

2. 비식별자관계만을 이용하여 데이터 모델링을 전개할 경우, 테이블 간의 과다한 조인을 유발하여 조인에 의한 성능 저하야기.

해결책.

※ 데이터 모델 관계 도출 시 식별자관계와 비식별자관계의 의미를 정확하게 이해하고 업무적 특징, 조인 관계, PK 구성을 고려하여 식별자관계/비식별자관계를 결정.


비식별자관계 설정시 고려사항

관계분석 → 관계의 강/약 분석 → 자식테이블 독립 PK 필요 → SQL복잡도 증가,개발생산성 저하
                ↓ 약한관계             ↓ 독립 PK 구성                ↓ PK 속성 단순화
                                        비식별자관계 설정 고려


[아는 만큼 보이는 데이터베이스 설계와 구축_이춘식] 참조.

PK 컬럼 순서의 중요성

2009. 3. 11. 12:34 | Posted by 신비마마
PK순서에 대해 별달리 고려치 않을 시 여러가지의 문제점이 생긴다.
  1. 인덱스 구성에서 의도하지 않은 순서의 Primary Key Unique Index가 생성.
  2. 그에 따라 조회 SQL 실행시 성능 저하 현상 나타남.
  3. 많은 인덱스가 생성되므로 입력/수정/삭제 시 불필요한 내부 작업이 증가해 성능에 악영향.

 테이블 생성 전에 SQL Where 절을 분석하여 엔티티타입의 PK 컬럼 순서를 조정하는 작업이 필요하다.

 인덱스의 정렬 구조를 이해한 상태에서 트랜잭션의 특성에 따른 PK 구성을 하여 인덱스 범위를 최소화하는방향으로 데이터 모델에 반영.


[아는 만큼 보이는 데이터베이스 설계와 구축_이춘식] 참조.