1.
제가 바본지 이게 왜 인덱스가 안걸리는건지 이해가 안갑니다.
create table test (a int);
create index testidx on test (a);
insert into test values(1);
insert into test values(2);
insert into test values(5);
insert into test values(2);
insert into test values(4);
insert into test values(41);
insert into test values(28);
explain select * from test where a>0;
Seq Scan on test (cost=0.00..22.50 rows=333 width=4)
Filter: (a > 0)
explain select * from test where a=0;
Index Scan using testidx on test (cost=0.00..17.07 rows=5 width=4)
Index Cond: (a = 0)
이런 현상에 대해 설명좀 해주세요. 왜 =는 돼고 >는 안되는지요.
2.
인덱스가 생성 될때 어떤 상태로 소트돼 저장 되나요?
원 데이터row의 정렬순서로 저장되는건가요?
아니면 인덱스 걸린 칼럼이 소트된 상태로 저장 될까요?
최근에 읽은 책의 부분범위 처리에 대한 부분에서 인덱스된 값이
조건의 최대범위에 도달하면 옵티마이저는 처리를 중단 한다
이런 항목이 있는데 이것은 인덱스가 해당 값에 따라 소트되어
저장되야지 말이 되는것 같아서요. 왜냐하면 최대 범위에 도달
했더라도 무작위로 소트되었다면 특정값이후에도 조건에 해당
되는 값이 있을수도 있지 않을까요?
3.
btree,rtree,hash 인덱스의 내부 매카니즘에 대해 설명된 자료를 얻을
수 없을까요? 제가 가진 데이터 베이스 관련 서적이 3권이고 여기
dbms일반에서 칼럼하고 여기저기 읽어 봤는데 이런 인덱스 구조에 대해
이미 알고 있다는 전제 하에서 글이 진행되는건 많은데 인덱스 자체의
구조에 대해 설명은 찾기가 힘들더라구요. 좀 부탁좀 드립니다.
|