복합키를 구성할 때 인덱스 관련 질문드립니다. 0 3 1,969

by Albothyl [Oracle 기초] [2014.09.05 16:15:38]


CREATE TABLE SWINDLER(
    PHONENUMBER   VARCHAR2(13)   NOT NULL,
    ACCOUNTNUMBER VARCHAR2(25)   NOT NULL,
    ACCOUNTNAME   VARCHAR2(15)   NOT NULL,
    BANKNAME      VARCHAR2(20)   NOT NULL,
    DAMAGEPRICE   NUMBER         NOT NULL,
    SWINDLEDATE   DATE,
    ITEMNAME      VARCHAR2(25)   NOT NULL,
    LOCATION      VARCHAR2(25),
    TITLE         VARCHAR2(50)   NOT NULL,
    CONTENT       VARCHAR2(3000) NOT NULL,
    WRITER        VARCHAR2(50)   NOT NULL,
    CREATEDATE    DATE DEFAULT SYSDATE
);
ALTER TABLE SWINDLER ADD CONSTRAINT SWINDLER_PK_COMPOUND PRIMARY KEY(PHONENUMBER, ACCOUNTNUMBER, ACCOUNTNAME);

위 테이블을 만들려고 합니다. 붉은색 컬럼들을 복합키로 구성할 때 SELECT시 PHONENUMBER나 ACCOUNTNUMBER로 검색을하면 인덱스나 부분인덱스를 타겠지만 마지막 복합키인 ACCOUNTNAME을 검색하면 인덱스를 안타고 데이터 전체를 검색하는걸로 알고있습니다. 이럴경우 어쩔수없이 복합키 이외에 따로 ACCOUNTNAME에 인덱스를 만들어야 할까요? 아니면 다른 좋은 방법 없을까요?

 

by 비주류 [2014.09.05 16:25:07]

선행 컬럼들의 distinct 값이 적어 skip scan 할 수 있는 경우가 아니라면,

해당 컬럼을 선두 컬럼으로 인덱스를 따로 구성해야 할 것 같습니다.

accountnumber 의 경우에도 마찬가지 입니다.


by 마농 [2014.09.05 16:31:37]

필요하다면 만들어야죠.
그런데...
PK 는 accountnumber 하나로 족하다고 생각됩니다.
다른 항목이 PK 에 들어갈 이유가 없습니다.
성능을 위한 거라면 별도 복합 인덱스를 구성하시면 됩니다.
결국 복합 인덱스가 아닌 개별 인덱스 3개가 존재해야 할 듯 하네요.


by Albothyl [2014.09.05 16:36:47]

답변 감사합니다. 각각 인덱스를 추가하는 방향으로 가야겠네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입