클러스터드 인덱스 관련 문의 0 1 2,137

by 웁스 [MySQL] [2013.06.18 13:17:16]


CREATE TABLE TBL_CLUSTERED_TEST (
  LOG_DATE CHAR(8) NOT NULL,
  MEDIA_ID CHAR(1) NOT NULL,  
  PROCEEDS DOUBLE DEFAULT NULL,
  PRIMARY KEY (LOG_DATE,MEDIA_ID)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
DROP TABLE TBL_CLUSTERED_TEST
INSERT INTO TBL_CLUSTERED_TEST (LOG_DATE, MEDIA_ID, PROCEEDS) VALUES ('20130618', 'A', 1000);
INSERT INTO TBL_CLUSTERED_TEST (LOG_DATE, MEDIA_ID, PROCEEDS) VALUES ('20130619', 'A', 1000);
INSERT INTO TBL_CLUSTERED_TEST (LOG_DATE, MEDIA_ID, PROCEEDS) VALUES ('20130619', 'C', 2000);
INSERT INTO TBL_CLUSTERED_TEST (LOG_DATE, MEDIA_ID, PROCEEDS) VALUES ('20130619', 'B', 1000);
INSERT INTO TBL_CLUSTERED_TEST (LOG_DATE, MEDIA_ID, PROCEEDS) VALUES ('20130613', 'B', 3000);
SELECT * FROM TBL_CLUSTERED_TEST;
CREATE INDEX PROCEEDS_IDX ON TBL_CLUSTERED_TEST (PROCEEDS);
클러스터드 인덱스 생성 테스트를 하다가 이상한 현상을 겪게 되어 이곳에 문의 드립니다.
TBL_CLUSTERED_TEST 테이블 생성 시 LOG_DATE, MEDIA_ID 컬럼에 복합키를 생성하면 자동적으로 클러스터드 인덱스가 생성이 되고, 위와 같이 테스트 데이터를 insert 하게 되면 물리적으로 정렬이 된 상태로 저장이 됩니다.
그런데 PROCEEDS 컬럼에 인덱스를 생성하게 되면 해당 컬럼이 물리적으로 정렬이 되버리는 현상이 발생하고 있습니다.
혹시, 이런 현상이 발생되는 이유는 무엇 때문인지 확인 부탁 드리겠습니다.
by l2monkeys [2013.07.01 15:50:54]
MariaDB [test]> explain extended SELECT * FROM TBL_CLUSTERED_TEST\G ;
*************************** 1. row ***************************
   id: 1
  select_type: SIMPLE
    table: TBL_CLUSTERED_TEST
type: index
possible_keys: NULL
  key: PROCEEDS_IDX
  key_len: 9
  ref: NULL
rows: 5
filtered: 100.00
    Extra: Using index
1 row in set, 1 warning (0.03 sec)

이렇게 해보시면 index 를 PROCEEDS_IDX 이인덱스를 타는것을 알수 있습니다. select *  로 해서 해당 데이터가
이인덱스를 타고 데이터를 가져오기 때문에 이처럼 결과가 나오는 겁니다.

하지만

MariaDB [test]> explain select LOG_DATE,MEDIA_ID from TBL_CLUSTERED_TEST\G ;
*************************** 1. row ***************************
   id: 1
  select_type: SIMPLE
    table: TBL_CLUSTERED_TEST
type: index
possible_keys: NULL
  key: PRIMARY
  key_len: 27
  ref: NULL
rows: 5
    Extra: Using index
1 row in set (0.00 sec)

이렇게 인덱스 값을 select 조건에 주면 index 가 primary 키값을 통해 가져오게 됩니다.
그럼 정렬된 값을 가져오곘져

어떤 인덱스 값을 타고 가져오는거에 따라  값의 정렬이 바뀌게 되는 거져
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입