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 27571 게시물 읽기
No. 27571
SQL 쿼리 중 색인에 관한 질문이여~!
작성자
김두송(papyruce)
작성일
2008-05-22 14:19
조회수
3,241

색인을 사용할 경우 속도가 왜??? 빨라지는지에 관한 질문입니다.

(조금 시스템적으로 궁금한 부분임..)

-----------------------------------------------------------


A와 B라는 두개의 테이블이 있어여

(테이블 내용은 아래에 적었음)

테이블A의 primary key는 student_number 입니다.


따라서 A와 B를 join한 결과를 얻기 위해선 조건절에 

where A.student# = B.student# 

이런식으로 적는데여..


이제 질문입니다.

교재에서 예를 든것이 "퀴리1"을 그냥 사용하는 것 보다 색인을 사용할 경우 검색속도가 빨라진다고 하는데 왜그러는지 모르겠습니다.

(쿼리1은 바로 밑에 적었습니다.)


쿼리1 : select name,address

              from A,B

              where A.student# = B.student#


사용하면 검색속도가 빠르다는 쿼리2개 :

1. creat index AA# on A(student#)

2. creat index BB# on B(student#)



(테이블 2개)


   A                                         B

name                                 student#

student#                             location

grade                                 address

class




색인을 사용할 경우.... 어짜피 참조횟수는 같지않은가여??

1      5

2      6

3      7

4      8

이럴때 1-5,1-6,1-7,1-8,2-5,2-6,,,, 이런식으로 검색해서 맞는 조건 나오면 거르는것이 아닌가 해서여..


질문이 잘 전달이 되었는지 모르겠네요 ^^;;

그럼 고수님들 답변 부탁드립니다~!


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

좀 광범위한 질문이지만, 간단히 답변해드리면,

색인이 적용되지 않은 컬럼은, 정렬이 되어 있지 않다고 볼 수 있습니다.

 

말씀해주셨던 테이블의 형태와 유사한 예제를 작성해보면,

A테이블에 번호가 3,4,1,5,6

B테이블에 번호가 7,2,5,1,4

라고 들어 있다면, 말씀해주신 것과 같이 5 x 5 = 25번의 비교가 필요합니다.

하지만, 해당 컬럼이 색인(unique)되어 정렬되어 있다고 가정한다면,

A테이블에 번호가 1,3,4,5,6

B테이블에 번호가 1,2,4,5,7

과 같이 들어가 있게 되고, 검색 결과는 다음과 같습니다.

#....A----B

(1) ( 1 == 1 ) -> unique한 색인이므로, 양쪽 모두 다음 줄로 넘어갑니다. (같은 값이 있을 수 없으므로)

(2) ( 2 == 3 ) -> 다르지만, A가 작으므로 A만 다음 줄로 넘어갑니다.

(3) ( 4 == 3 ) -> 마찬가지로 B가 작으므로, B만 다음 줄로 넘어갑니다.

(4) ( 4 == 4 ) -> A, B 둘 다 다음 줄로...

(5) ( 5 == 5 ) -> 마찬가지...

(6) ( 6 == 7 )

따라서, 총 6번의 비교로 모든 줄을 비교할 수 있게 됩니다.

 

데이터베이스마다 상세 구현은 다르지만, 개략적으로 설명드리면 위와 같다고 할 수 있습니다.

(정렬되어 있지 않은 컬럼이라면, 내부적으로 정렬해서 위와 같이 동작되기도 하지만, 정렬을 매번 하는 만큼 오버헤드가 생기게 됩니다.)

박현우(lqez)님이 2008-05-29 00:13에 작성한 댓글입니다.

아~! 이해가 갔습니다. 감사합니다. ^^

김두송(papyruce)님이 2008-06-03 08:53에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
27574mysql 바이너리 로그 [1]
이성식
2008-05-23
3757
27573테이블이 주기적으로 삭제됩니다
이재만
2008-05-22
3326
27572[질문]mysql로 DB를 만들때 괜찬은 주제좀 추천해 주세요, [1]
문용진
2008-05-22
3233
27571SQL 쿼리 중 색인에 관한 질문이여~! [2]
김두송
2008-05-22
3241
27569log-bin.001 파일을 어떻게 변경해야 하나요?? [1]
김종수
2008-05-22
3435
275682개의 테이블에서 순위 뽑아오기 도와주세요^^ 디비마스터님.OTL [2]
김가람
2008-05-22
3603
27567[질문] 텍스트 검색 은 어떤DB를 써야 할까요. [1]
새벽소리
2008-05-21
3213
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다