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 29768 게시물 읽기
No. 29768
이런 경우 인덱스를 어떻게 잡아야 할까요?
작성자
윤현호
작성일
2010-08-24 18:34
조회수
6,894

테이블 스키마는 대략 아래와 같습니다.

 

FIELD             TYPE               
----------------  -------------------
data_id           BIGINT(20) UNSIGNED  Primary Index
check_1           ENUM('Y','N')      
check_2           ENUM('Y','N')      
check_3           ENUM('Y','N')      
check_4           ENUM('Y','N')      
check_5           ENUM('Y','N')      
name_1            VARCHAR(80)        
name_2            VARCHAR(40)        
name_3            VARCHAR(255)       

 

이런 상황에서 아래와 같은 쿼리를 써야할 때 어떻게 인덱스를 잡아야 좋을까요?

 

SELECT *
FROM table1
WHERE check_1 = 'N'
    AND check_2 = 'Y'
    AND check_3 = 'Y'
    AND check_4 = 'N'
    AND check_5 = 'Y'
GROUP BY name_1, name_2, name_3
ORDER BY data_id;

 

이런 저런 방법을 시도해봐도 인덱스를 타지 않네요. 덕분에 실행속도가 상당히 느려집니다.

그럼 부탁드리겠습니다!

 

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

하나의 테이블에 대한 스캔은 오직 하나의 인덱스만을 활용하기 때문에, 데이터의 내용과 크기에 따라 접근 방법은 다양해질 수 있습니다.

 

우선, 대상 테이블의 크기, 테이블 스키마 (SHOW CREATE TABLE table1)와 작성하신 쿼리 앞에 EXPLAIN을 붙여 요청했을 때 나오는 '실행 계획'에 대한 결과를 올려주시면 다른 분들이 댓글을 다는데 도움이 되리라 생각됩니다.

 

기본적으로는 check_X 계열을 묶은 멀티컬럼 키가 있으면 도움이 될 것 같습니다.

박현우(lqez)님이 2010-08-25 11:02에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
29771. [1]
변재언
2010-08-26
8118
29770mysql error 1064
BlueSpy
2010-08-25
7907
29769특정 필드에서 특정 문자를 제거 하는 방법이 있을까요?? [2]
mysql 초보
2010-08-25
7776
29768이런 경우 인덱스를 어떻게 잡아야 할까요? [1]
윤현호
2010-08-24
6894
29767length() 결과로 0 과 null 의 차이점 [1]
greenluck
2010-08-24
6908
297662008서버 관련 질문 [1]
푸르미
2010-08-23
6614
29765같은 구조의 테이블에서.. [1]
조중연
2010-08-23
6879
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다