개발 이야기 2 > 자유게시판

자유게시판

개발 이야기 2 정보

개발 이야기 2

본문

mysql> show index from g4_write_lng_marriage_info;
+----------------------------+------------+---------------------+--------------+
| Table                      | Non_unique | Key_name            | Seq_in_index | Column_name  |
+----------------------------+------------+---------------------+--------------+
| g4_write_lng_marriage_info |          0 | PRIMARY            |            1 | wr_id        |
| g4_write_lng_marriage_info |          1 | wr_num_reply_parent |            1 | wr_num        |
| g4_write_lng_marriage_info |          1 | wr_num_reply_parent |            2 | wr_reply      |
| g4_write_lng_marriage_info |          1 | wr_num_reply_parent |            3 | wr_parent    |
| g4_write_lng_marriage_info |          1 | wr_is_comment      |            1 | wr_is_comment |
| g4_write_lng_marriage_info |          1 | wr_is_comment      |            2 | wr_id        |
+----------------------------+------------+---------------------+--------------+
6 rows in set (0.01 sec)

    //$sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_id desc limit 0, $rows ";
    // 위의 코드 보다 속도가 빠름
    $sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_num limit 0, $rows ";

어떤 인덱스(또는 인덱스를 안 쓰다가)에서

어떤 인덱스(또는 인덱스를 안 쓰게)로 바뀌게 될까요?
추천
0

댓글 6개

mysql 에서는 인덱스가 걸려도 자체적으로 desc를 지원하지 않습니다.

만약에 desc를 쓰게되면 일일이 배열을 다 뒤집는다고 생각 하시면 됩니다.

그럼 엄청난 과부하가 걸리겠죠..

기본적으로 asc만 지원하니.. desc를 뺀것만으로도 엄청난 속도 향상을 볼수 있는 것이죠..^^
index scan도 full scan이 있고 range scan이 있죠.
또 table scan도 마찬가지고요.

인덱스 순서가 desc가 아니라면 index range scan이죠.
이 경우 범위가 크지 않다면(게시판 경우 page 번호가 작다면) 시간은 얼마 안 걸리죠.
재대로 알고 있는지는 잘 모르겠지만...

오라클 같은 디비에서는 인덱스를 역순으로 스켄 하는 기능이 있어서..

asc로 하든 desc로 하든 문제가 없습니다.

그러나 mysql은 지원하지 않는다네요..

그래서 desc로 정렬을 해서 출력하게 되면 속도가 느려지게 됩니다.

말씀 하신것 처럼..
"게시판 경우 page 번호가 작다면" asc든 desc이든 소요되는 시간은 동일 할거라 생각이 듭니다.

그러나 데이터가 100만건 1억건 되는 곳에서는 엄청난 속도 차이가 난다더라고요.
어떤 포럼에서 글을 읽었습니다.

그래서 날짜 순으로 정렬하기 위해서 10만에서 날자를 빼서 저장하고 출력할때는
다시 10만에 저장된 값을 빼서 출력 한다는군요..

단적인 예로...

그누보드의 게시판 테이블 디자인도.. wr_num이 이와 같은 원리로 되어 있습니다.

전체 게시물수 - wr_num으로 하고 wr_num에 인덱스를 걸어서 정렬하죠..


그래서 가끔.. 프로그램의 상의 실수로.. 게시물 번호가.. 음수로 나오는건
전체 게시물수를 + 안해줘서 그런일이 발생합니다.


mysql에서 desc가 안되는 이유때문에 많은 분들이 이런 방법을 사용하시는걸로 알고는 있는데..

정확한지는 잘 모르겠네요 ^^;;
전체 199,647 |RSS
자유게시판 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT