본문 바로가기

이론/DB

[데이터베이스] Indexing - (3)

page 13)

clustered index

s_num으로 클러스터링되어있다 -> s_num 순으로 정렬되어있는 것이다. 

한테이블에는 클러스터인덱스가 단 하나 존재한다. 

 

page 19)

primary key 지정하면 클러스터 인덱스가 만들어진다. 

녹색 포인트는 튜플들을 가리키고 있는 포인트다. 포인트는 순차적이다. 

 

range search : 나이가 30살 이상 40살 미만을 찾아라. 범위를 줬을때, search 가 range search이다.

range search 할때 clustered index 와 unclustered index의 성능이 많이 차이난다. 

 

clustered Index

인덱스를 찾고 튜플들을 읽어가면된다. 그래서 튜플 각각의 포인터를 따라가면 된다. 딱 두페이지만 읽으면 된다.

unclustered index

30인 경우 한번 읽고 , 등등 페이지를 4번이나 읽어야한다. 

 

primary key에다가 clustered index를 주면 성능이 향상된다. 

equality search에서도 차이가 난다. 나이가 30인 사람을 검색하라고 하면, 나이가 30인 사람이 여러명인 경우가 있다.

equality search에서도 동률값이 많을때에는 성능이 좋다.

 

page20) 

For each query in the workload : 각 쿼리에 대해서 어떤 릴레이션을 접근하는지,사용자에 의해 어떤 애트리뷰트가 사용이되는지 

index를 어디에다 걸면 좋을지 알려고 하는 것이다. 

 

For each update in the workload

selectivity : 전체 튜플의 개수 대비 검색 조건을 만족시키는 튜플의 비율 

selectivity가 좋다: selectivity가 낮아서 좋은것이다. 값이 작은것에 걸어놓는것이 효과가 좋다. 

 

업데이트 자체는 인덱스를 안해놓으면 느리다. 

 

page21) 

어떤 테이블을 인덱스로 만들것이냐? 

 

page22) 

인덱스를 만들면 데이터 업데이트비용이 증가한다. trade off관계이다. 

 

page23)

where 절에 들어가는 조건에 포함되어있는 애트리뷰트에 대해 인덱스를 만드는 것을 첫번째로 고려하자. 

selectivity가 높은지, 낮은지 clustered가 됐는지 안됐는지에 따라서 성능차이가 많이난다.로 이해하자.

 

page24)

selectivity가 10퍼센트이면 괜찮은 인덱스이다.

 

page27) 

composite search key(multi key) : 여러개의 애트리뷰트로 구성된 인덱스 

search key: 인덱스에 사용되는 애트리뷰트

 

age와 salary가 붙어있는 composite index로 쓰자.

 

where age= 12 and sal  =10

 

동시에 작용하는 키로 인덱스를 만들어놓으면 age가 12이고 sal이 10인 인덱스 엔트리를 찾을 수 있고 바로 결과가 리턴이 가능하다.

 

<age,sal> 인덱싱과 <sal,age>순으로 인덱싱하는 것은 다르다.

 

 where age= 12 and sal  >10 도 <age,sal> 인덱싱으로 찾을 수 있다. 

 

multi-key index는 순서가 중요하다. <age,sal> , <sal,age> 


use university; 

 

데이터 100만개 테스트 

 

select count(*) from student; 

 

select * from student limit 10 // 0,5초 걸림 

 

select * from student where sno = 929268; // 0.997초 걸림 

 

create index idx_student_s_name on stuent(sname)  //오래걸림