[1원] mysql 인덱싱 - order by.... > Database

본문 바로가기
사이트 내 전체검색


회원로그인

오늘 96
어제 319
최대 618
전체 507,289
마음을 나누는 인터넷 일기장 - 통플 다이어리
Database

[1원] mysql 인덱싱 - order by....

페이지 정보

작성자 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일04-10-14 17:30 조회13,371회 댓글0건

본문

- 결합인덱스를 사용할 때 주의점.

아래와 같은 조건일 때...
------------------------------------------------------------------------------
Table_Name : 테이블명
No : auto_increment
A : 공지글(0일때 공지, 1일때 일반글)
B : Head (일반글일 경우 순차적으로 증가)
C : Order (위에서 아래로 순차증가)
D : Depth (답글의 깊이)

인덱스 추가 : ALTER TABLE Table_Name ADD INDEX (A,B,C);
-------------------------------------------------------------------------------

No,A,B,C,D 의 순서로 표기할 때 첫번째 게시물 ~ 세번째 게시물
1,1,1,1,0
2,1,2,1,0
3,1,3,1,0

여기에 공지글이 하나 달렸을 때
4,0,4,1,0

2번글에 답글이 하나 달렸을 때
5,1,2,2,1

그글에 답글 밑에 답글이 또 하나 달렸을때
6,1,2,3,2

--------------------------------------------------------------------------------

이럴 경우에 쿼리문은 아래와 같습니다.
SELECT * FROM Table_Name ORDER BY A asc,B desc,C asc
이 쿼리문의 뜻은
A 값에서 공지글(0)>일반글(1)의 순서로 정렬(asc)한 다음,
B 값에서 최근글(max) > 지난글(min) 의 순서로 정렬(desc)한 다음,
C 값에서 답글먼저올라온글(min) > 답글 나중올라온 글(max)로 정렬(asc)한다는 뜻입니다.

자... 그러면 위의 쿼리문이 인덱스를 탈까요? 못탈까요?
결론은 제대로 못탄다는 겁니다.
이유는 결합인덱스로 (A,B,C)를 줬기 때문에 설정된 인덱스가 A asc,B asc, C asc 로 잡히기 때문입니다.
ORDER 문에 의해서 A asc로 정렬할 때까지는 인덱스를 타는데, 그 다음에 B asc가 아니고 B desc로 되어있기 때문에 여기부터 일반필드를 참조해서 정렬을 해버립니다.

그러므로 결합인덱스를 제대로 사용하기 위해서는 각각의 값이 동일한 순서로 정렬이 되도록 만들어야 됩니다.
위의 예에서 B 값만 desc이기 때문에 인덱스를 정상적으로 타기 위해서는 B 값을 [순차증가값]이 아니라 [순차감소값]으로 만들면 됩니다. (예, 최초의 글이 9999999, 그 다음 글이 9999998이 되도록 한다. 혹은 최초의 글이 -1, 그 다음 글이 -2가 되도록 한다.)
그렇게 되면 [ORDER BY A asc,B asc,C asc]의 순서로 정렬을 하면 정상적으로 목록을 출력하게 되는 것인데, 이 경우에 [ORDER BY A asc] 만 해주면 결합인덱스에 의해서 B,C의 값은 자동으로 정렬이 됩니다.

위의 결과는 10만건 데이터를 가지고 실험했으며,
결합인덱스를 정상적으로 타지 못할 때 - 0.12 sec. (편차 0.05)
결합인덱스를 정상적으로 탈 때 - 0.01 sec (편차 0.01)
의 결과값을 얻었습니다.

이 실험을 하게 된 것은 동일하게 결합인덱스를 줬으나 [ ORDER BY A asc ] 일 경우와 [ ORDER BY A asc,B desc ] 의 경우가 둘다 동일한 인덱스를 타는데도 불구하고 소요시간이 너무 차이가 나서 그 차이의 원인을 찾다가 알게 된 것입니다.

(3시간만에 깨달은 팁입니다... 에효... 힘들어...)

추천 23

댓글목록

등록된 댓글이 없습니다.

Database 목록

Total 75건 1 페이지
Database 목록
번호 제목 글쓴이 날짜 조회 추천
75 windows 2003 MySQL 서비스 프로그램 등록 1067 에러 댓글2 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-11 21820 0
74 [mysql] 윈도우MySQL4.1.12서버 my.ini없이 실행하기 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-20 18082 67
73 VB MySql 연결 및 한글문제 해결 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-06 16821 0
72 Mysql Password() 크랙툴 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-30 15937 7
71 MySQL에서 root 암호(password) 설정 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-03 15685 0
70 MYSQL TEMPORARY 를 이용한 다중 검색 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-29 15233 2
69 MySQL RPM 설치 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-13 15216 0
68 MySQL에서 오라클의 rownum 구현하기 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-21 15015 0
67 MYISAM -> INNODB 변환 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-06 14662 0
66 mysql euckr 을 utf8 로 변경 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-29 14483 0
65 [mysql] NULLIF 함수의 활용 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 01-16 14339 30
64 mysql의 union연산이 빠르다고 합니다. nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-20 13974 0
63 엑셀 파일을 mysql 에 넣는 방법 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-16 13962 3
62 mysql과 Qmail 과 연동하는 방법 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-29 13921 6
61 InnoDB 설치 하기 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-16 13834 54
열람중 답변글 [1원] mysql 인덱싱 - order by.... nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-14 13372 23
59 [mysql] 윈도우MySQL4.1.12 root 암호 잊어 버렸을 경우 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-21 13192 65
58 [mysql] 번역: MySQL은 어떻게 LIMIT 를 최적화하는가 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-25 13132 4
57 mysql에 이미지 저장하기 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-29 12861 5
56 mysql 인덱싱 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-12 12710 10
게시물 검색

Copyright © nuno21.net All rights reserved. 상단으로
모바일 버전으로 보기