개발 이야기 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 ";
어떤 인덱스(또는 인덱스를 안 쓰다가)에서
어떤 인덱스(또는 인덱스를 안 쓰게)로 바뀌게 될까요?
+----------------------------+------------+---------------------+--------------+
| 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
0
댓글 6개

자게에 너무 학구적인 글을. 으흐흑.. ^_^
전 무식해서..
전 무식해서..

머리에 자유를 주려 왔건만....ㅠㅠ

mysql 에서는 인덱스가 걸려도 자체적으로 desc를 지원하지 않습니다.
만약에 desc를 쓰게되면 일일이 배열을 다 뒤집는다고 생각 하시면 됩니다.
그럼 엄청난 과부하가 걸리겠죠..
기본적으로 asc만 지원하니.. desc를 뺀것만으로도 엄청난 속도 향상을 볼수 있는 것이죠..^^
만약에 desc를 쓰게되면 일일이 배열을 다 뒤집는다고 생각 하시면 됩니다.
그럼 엄청난 과부하가 걸리겠죠..
기본적으로 asc만 지원하니.. desc를 뺀것만으로도 엄청난 속도 향상을 볼수 있는 것이죠..^^

찬성찬성~
index scan도 full scan이 있고 range scan이 있죠.
또 table scan도 마찬가지고요.
인덱스 순서가 desc가 아니라면 index range scan이죠.
이 경우 범위가 크지 않다면(게시판 경우 page 번호가 작다면) 시간은 얼마 안 걸리죠.
또 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가 안되는 이유때문에 많은 분들이 이런 방법을 사용하시는걸로 알고는 있는데..
정확한지는 잘 모르겠네요 ^^;;
오라클 같은 디비에서는 인덱스를 역순으로 스켄 하는 기능이 있어서..
asc로 하든 desc로 하든 문제가 없습니다.
그러나 mysql은 지원하지 않는다네요..
그래서 desc로 정렬을 해서 출력하게 되면 속도가 느려지게 됩니다.
말씀 하신것 처럼..
"게시판 경우 page 번호가 작다면" asc든 desc이든 소요되는 시간은 동일 할거라 생각이 듭니다.
그러나 데이터가 100만건 1억건 되는 곳에서는 엄청난 속도 차이가 난다더라고요.
어떤 포럼에서 글을 읽었습니다.
그래서 날짜 순으로 정렬하기 위해서 10만에서 날자를 빼서 저장하고 출력할때는
다시 10만에 저장된 값을 빼서 출력 한다는군요..
단적인 예로...
그누보드의 게시판 테이블 디자인도.. wr_num이 이와 같은 원리로 되어 있습니다.
전체 게시물수 - wr_num으로 하고 wr_num에 인덱스를 걸어서 정렬하죠..
그래서 가끔.. 프로그램의 상의 실수로.. 게시물 번호가.. 음수로 나오는건
전체 게시물수를 + 안해줘서 그런일이 발생합니다.
mysql에서 desc가 안되는 이유때문에 많은 분들이 이런 방법을 사용하시는걸로 알고는 있는데..
정확한지는 잘 모르겠네요 ^^;;