database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 29366 게시물 읽기
No. 29366
검색시 빠른 것은 인덱스는?
작성자
김명수(마동자)
작성일
2009-10-21 04:19ⓒ
2009-10-21 04:21ⓜ
조회수
6,427


1. 강제적으로 pos 인덱스를 잡아서 order by 에 using filesort 를 사용하지 않는다.


EXPLAIN SELECT * FROM _board USE INDEX ( pos ) WHERE true AND code = 'BD_D C_04' AND chkview = 'Y' ORDER BY pos DESC ;

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE a index NULL pos 10 NULL 525656 Using where



2. 기본 인덱스를 잡아서 using filesort 를 사용한다.



EXPLAIN SELECT * FROM _board WHERE true AND code = 'BD_D C_04' AND chkview = 'Y' ORDER BY pos DESC

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE a ref code,chkview code 26 const 1 Using where; Using filesort





이렇게 되었을 경우 어떤 쪽이 빠른 속도를 낼까요?


데이타는 약 100만개 정도 되며, 초당 쿼리는 약 100개이상 됩니다.


과연 어떻게 사용해야지 될까요 현재는 1번으로 사용하고 있으며, 2번의 경우 혼자 테스트는 빠르나 실제 사용에는 엄청 늘려집니다.


좋은 의견 부탁합니다.




이 글에 대한 댓글이 총 4건 있습니다.

일단 SHOW CREATE TABLE _board 의 내용을 같이 올려주시면 도움이 될 것 같습니다.

박현우(lqez)님이 2009-10-21 11:08에 작성한 댓글입니다.

안녕하세요 박성원입니다. 

간만에 들렀는데 간지나는 질문이 있네요 ㅋ


흠.. 현우님이 답변을 해드릴듯하지만 개인적으로 의문이 있어서 댓글을 답니다. 


index로 pk를 잡아두셨는데 굳이 pos라는 컬럼으로 정렬하는 별다른 이유가 있나요?
단순히 쿼리를 봐서는 2번이 훨씬 빠릅니다. 다만, 2번의 경우 where 조건이 들어간 컬럼을 이용하니 단번에 결과를 찾기는 하나 정렬을 위한 작업에 신경을 쓰니 

초당 100개의 쿼리가 들어온다면 100번의 정렬이 이루어 질듯한데요 

이러면 부하가 상당히 클거 같습니다. create 문을 봐서는 테이블 사이즈도 꽤 되는듯한데요 



1번을 쓰시는게 좋을듯한데요 향후 Table Size에 비래해서 속도가 점차 느려지겠지만 말이죠 ^^

order by를 하지 않아도 될듯한데요 ^^;; (그렇게 되면 2번으로 사용이 가능 할 듯합니다.)

인덱스의 경우도 다른 쿼리들도 돌겟지만 만약 해당쿼리의 조회가 이 쿼리 뿐이라면 

pos와 chkview를 합쳐서 키로 잡는게 도움이 될듯합니다. ^^;;




박성원(darkancia)님이 2009-10-21 18:15에 작성한 댓글입니다.
이 댓글은 2009-10-22 12:21에 마지막으로 수정되었습니다.
_board 의 index KEY `myorder` ('code','chkview',`pos`) 이렇게 만들고

EXPLAIN SELECT * FROM _board USE INDEX ( myorder) WHERE true AND code = 'BD_D C_04' AND chkview = 'Y' ORDER BY pos DESC ;

이렇게 했을 경우는 어떻게 되는 건가요???

김명수(마동자)님이 2009-10-22 22:16에 작성한 댓글입니다.
이 댓글은 2009-10-22 22:16에 마지막으로 수정되었습니다.
+----+-------------+--------+------+---------------+---------+---------+-------------+------+-------------+
| id | select_type | table  | type | possible_keys | key     | key_len | ref         | rows | Extra       |
+----+-------------+--------+------+---------------+---------+---------+-------------+------+-------------+
|  1 | SIMPLE      | _board | ref  | myorder       | myorder | 15      | const,const |    1 | Using where |
+----+-------------+--------+------+---------------+---------+---------+-------------+------+-------------+

말씀하신 인덱스로 충분히 성능 향상이 있을 것으로 보이는데, 어떠신가요?
박현우(lqez)님이 2009-10-26 11:13에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
2936930분 단위로 통계를 낼수 있는 방법에 대해 문의합니다. [1]
초보자
2009-10-21
8701
29368innodb에서 varchar 길이선택과 성능? [3]
이왕태
2009-10-21
6851
29367insert 문에 대한 질문... [1]
구자범
2009-10-21
5819
29366검색시 빠른 것은 인덱스는? [4]
김명수
2009-10-21
6427
29365group by로 최댓값 구하는방법? [1]
ㅇㅇ
2009-10-20
6312
29364함수 질문 드립니다.
김지현
2009-10-20
5782
29363mysql 강제종료후 startup이 느립니다 [1]
이동훈
2009-10-20
6983
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다