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 27219 게시물 읽기
No. 27219
[질문]속도를 고려하여 PK(INDEX)를 정하려 하는데요..
작성자
남상식(sangsik)
작성일
2007-12-04 16:37
조회수
2,704


속도를 고려하여 PK(index)를 잡을려고 합니다.

table_name
------------
idx
scode
acode
tm
uid
aa
bb
cc
dd
ee
ff
------------
이중에서 검색조건에 자주 사용될  scode, acode, tm, uid 컬럼과
중복방지(유일한값)를 위해 idx를 PK로 잡았는데요.

select 구절엔 scode, acode, tm, uid 4개의 컬럼을 매번 사용하고
idx는 거의 사용을 안하는데요.

컬럼 idx,scode,acode,tm,uid 을 모두 PK(index)로 잡아도 조회속도에는
문제가 없을지 조언 문의 드립니다.

감사합니다.

 

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

MySQL에서 multi-column index를 쓰는 경우

그 인덱스안에 들어가는 칼럼의 순서가 매우 중요합니다.

예를 들어, multi-column index로 A,B,C 3개의 칼럼을 지정했다면,

쿼리 조건에

A 또는

A,B 또는

A, B, C 가 있으면

multi-column index를 타게 되지만

B 또는

C 또는

B, C만 있으면 선행하는 칼럼에 대한 정보가 없기 때문에 multi-column index를 타지 않습니다.

 

또 검색조건에 A만 있는 것 A,B만 있는 것, A,B,C은 인덱스를 타지만 검색하는 레코드의 수에 차이가 납니다.

덧붙여 A, C칼럼이 쿼리조건에 있는 경우 위 인덱스를 타지만 multi-column index의 B의 정보가 없기 때문에 A만 있는 것과 동일한 갯수의 데이터가 인덱스를 통해 filtering됩니다.

 

님께서 말하신 것처럼 idx가 거의 사용되지 않는 상황에서

multi-column index의 맨앞에 idx를 놓게 되면

거의 모든 쿼리에서 PK를 타지 않게 됩니다.

따라서 가장 빈도가 높은 칼럼을 맨앞에 놓는게 일반적으로 좋습니다.

다만 너무 인덱스가 커지면 insert나 delete 등의 속도도 느려진다는 것에 유의하세요.

 

clay님이 2007-12-04 18:18에 작성한 댓글입니다.
이 댓글은 2007-12-04 18:21에 마지막으로 수정되었습니다. Edit

답변 감사드립니다.

남상식(sangsik)님이 2007-12-05 13:49에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
27224wait_timeout 변경시 고려사항? [1]
이경희
2007-12-05
3652
27222캐릭터셋 변경에 대해 질문드려요 ^^ [1]
박성원
2007-12-04
3255
27220정수값을 실수로 저장시 오류. [1]
한우석
2007-12-04
2542
27219[질문]속도를 고려하여 PK(INDEX)를 정하려 하는데요.. [2]
남상식
2007-12-04
2704
27218killed 로 표시되고 죽지 않는 Mysql 프로세스는 어떻게? [1]
김형섭
2007-12-04
2804
27216테이블의 용량과 쿼리 속도 [1]
hhje22
2007-12-01
2880
27215invalid pointer error 가 발생했습니다. [1]
이철호
2007-11-30
6843
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다