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
운영게시판
최근게시물
PostgreSQL Q&A 6613 게시물 읽기
No. 6613
[초보] 인덱스 만드는 방법
작성자
이고선(koreako)
작성일
2006-04-09 13:12
조회수
2,834

안녕하세요. 데이타베이스 입문하는 초보자 입니다.

일전에 MySQL부터 사용해 오긴 했는데 기본이 안되어 있다보니 대충대충 공부해 왔습니다.

그동안 궁금해 오던 부분인데요.. 인덱스를 생성할때 인덱스 하나에 여러개의 컬럼을 지정하여 하는 것과 인덱스 하나당 컬럼 하나를 지정해서 하는 차이점이 뭐가 있는지 궁금 합니다.

그리고 인덱스를 만듦으로써 검색속도가 유리해지는건 알겠는데 간단한 원리 설명도 좀 부탁 드릴게요.

또하나 궁금한점은 MySQL 구조를 POSTGRES로 옮길려고 하는데 간단하게 처리할 수 있는 유틸리티가 없을까요.

선배님들의 가르침 부탁 드립니다.

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

인덱스 생성 시기에 대해 개인적인 생각을 말씀드리자면;

Primary key가 아닌 다음에는 개발이 끝나고 데이터도 다 넣어보고 성능 테스트도 해보고 하는 시점에 인덱스들을 생성합니다.

인덱스는 있어야 하니까 만드는게 아니라 어떻게 데이터들이 조회되느냐에 따라 그 상황에 따라 만들어져야 합니다.

어떤 사람은 인덱스 해놓으면 무조건 빠른줄 알고 모든 컬럼에 인덱스를 거는 사람도 있고;; 인덱스에 대한 이해가 없는 상태에서 무리한 인덱스 생성은 오히려 성능 저하를 가져올 수 있습니다.

 

인덱스 생성 시 여러 컬럼을 한꺼번에 인덱스 하는 것을 멀티컬럼 인덱스 라고 하는데요. 인덱스의 종류나 조회시의 쿼리문에 따라 사용여부가 선택됩니다.

1. a 컬럼이 where 시 조건으로 나오고 b 컬럼으로 순차정렬 되야 할 때 : btree 인덱스로 (a, b) 잡으면 where a='검색값' 만 해주면 a 컬럼을 인덱스에서 찾은 후 순차적으로 인덱스하는 btree 의 특성 상 b 컬럼은 자동으로 정렬되어 나옵니다.

2. a 컬럼과 b 컬럼이 where 조건절에서 자주 사용되며 a 컬럼은 항상 필수로 검색될 경우 : (a, b) 를 잡으면 a 조건 검색 시 인덱스를 사용하며 a 와 b 모두 검색 될 경우 이 경우가 더 나은 성능을 기대할 수 있습니다.

 

위의 예를 보시면 아시겠지만 데이터 모델링 이후 데이터를 조회하기 위해 쿼리문을 작성하게 되는데요. 쿼리문을 어떤 방식으로 사용하느냐에 따라, 어떻게 최적화 하느냐에 따라 인덱스의 사용이나 종류가 결정됩니다. 물론 인덱스도 잘 만들어야 하지만 그 전에 쿼리문을 잘 만들어야 하고 그 전에 모델링을 잘 해야 합니다.

 

인덱스의 원리에 대해서는 인터넷에 많은 문서가 있습니다.

btree, hash 정도 보시면 되겠는데요.

btree는 순차 색인입니다. 점점 커지는 순서로 색인을 하는데 트리형태로 일정 범위마다 트리가 분기해서 데이터의 검색 깊이가 깊어지게 됩니다. 구현에 따라 조금씩 차이가 있지만요. 여튼 요는 1 10 20 이라는 포인트의 아래에 1~9, 10~19, 20~ 이라는 트리들이 붙게 되서 <, >, = 연산자에 빠르게 대응할 수 있고 정렬에 사용할 수 있습니다.

pgsql에서 인덱스를 만들면 기본적으로 btree 인덱스가 생성됩니다.

 

mysql -> pgsql 컨버터는 잘 모르겠네요 ㅎ;

신기배(소타)님이 2006-04-09 13:48에 작성한 댓글입니다.

소타님 감사합니다.

깊이 있는 공부는 제 몫이겠지만 궁금하던 부분에 대한 대략적 의미 전달이 오는 것 같습니다.

영어가 짧다보니 찾아서 해석하려 하기보다는 이렇게 부탁을 드리네요.

도움 주셔서 감사합니다. 복 받으세요^^

이고선(koreako)님이 2006-04-09 14:59에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6618이에러를 어떻게 해야 하죠 [2]
곽상옥
2006-04-13
2226
6615임의의 테이블 백업하는 방법 좀 구해봅니다. [2]
김진홍
2006-04-12
2540
6614갑자기 db가 접속이 안됩니다. [3]
곽상옥
2006-04-11
2606
6613[초보] 인덱스 만드는 방법 [2]
이고선
2006-04-09
2834
6612윈도우 상에서 PostgreSQL 관련 파일이 손상될 경우? [1]
남경수
2006-04-07
2679
6610postgresql-8.1.3.tar.bz2 파일을 다운받았읍니다 [3]
초보
2006-04-07
2635
6609외부 테이블 컬럼 참조 [4]
숙취
2006-04-07
2527
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다