휴. 생각할 수록 index에 관해 모르는 것이 늘어만 가는군요.
좀 질문이 많지만 부탁드리겠습니다.
1. 다음과 같이 테이블을 만들었습니다.
create table aa (a varchar(10), b varchar(10), c varchar(10));
그리고 질의할때
select * from aa order by b;
select * from aa order by c;
select * from aa order by b, c;
이런 질의들이 있습니다. 이때 인덱스는 어떻게 만드는 것이 가장 좋을까요?
1-1 b와 c에 각각 인덱스를 만든다. (이래도 복수 필드에 대한 인덱스 - order by b,c - 를 수행하나요?)
1-2 b,c에 대한 복수필드 인덱스를 하나 만든다. (이때 b와 c를 각각 인덱싱 - order by b 또는 order by c 같은 - 하나요? mysql에서는 b는 하고 c는 하지 않는 것으로 나와 있던데...)
1-3 각각 만들거나 복수필드 하나를 만들거나 모두 가능하다면 어떤 것이 성능에 유리한가요? 이런 필드가 한 대여섯개 정도 있어도 모두 하나의 복수 인덱스로 만들면 될까요? (예를 들면 b,c,d,e,f,g등에 걸쳐 여러 인덱스가 일어나면 하나의 복수필드 인덱스를 만들어서 모두 같이 사용한다?)
2. 두번째 질문입니다.
다음과 같이 테이블을 만들었습니다.
create table aa (a varchar(10), b varchar(10), c varchar(10));
a는 primary key이고 b에는 그냥 index를 만들었습니다.
create table aa1() inherits(aa);
create table aa2() inherits(aa);
create table aa3() inherits(aa);
이러면 일단 상속받은 테이블등(aa1,aa2,aa3)에는 index가 형성되지 않습니다.
그런데 모든 테이블, 즉 aa 에 질의하는 것은 매우 적고(없지는 않지만) 대부분은 aa1,aa2,aa3에 각각 질의하는 것이 대부분입니다. 이런경우에
2-1 aa1,aa2,aa3에 각각 인덱스를 만들어야 하나요?
2-2 각각 인덱스를 만들꺼면 parent table,즉 aa에는 인덱스를 만들 필요가 없지 않나요?
2-3 child table에 primary key index는 어떻게 만들죠? 그냥 unique index를 만들면 되나요? (그러니까 primay key index란 것이 not null에 unique index와 동일한 것인가요?)
일단 질문은 이렇습니다. 답변을 올려주시면 궁금한 점을 다시 올리겠습니다.
지금 현재 제 database에는 child와 parent 테이블에 모두, 필요한 field에 각각 인덱스가 만들어져 있습니다. 그래서 전체 인덱스의 숫자만 수백에 이르는 군요. 이래서야 성능은 잘 모르겠지만 인덱스의 전체용량만도 엄청...
물론 용량보다야 성능이 훨씬 중요하니까 성능만 좋다면야 그정도는 감수할 수 있는데 제가 인덱스를 제대로 사용하고 있는지에 대한 확신이 없습니다.
그럼 답변 기다리겠습니다. 감사합니다.
|