DBMS 에서 자료를 입력하는 순서는 자료를 다룰때의 순서와는 전혀 무관합니다. 인덱스도 마찬가지로 입력한 순서와는 무관합니다.
사용한 쿼리의 경우라면 당연히 index (a,b) 로 해 주셔야 합니다. 그리고 oder 를 asc, desc 로 하는 것은 좋지 않습니다. 물론 어쩔수 없는 경우라면 방법이 없지만...
자료 입력 후 인덱스 선언이 이루어졌다면
OPTIMIZE를 하십시요.
optimize tables 테이블명;
하시면 됩니다.
인덱스 선언은 SQL에 따라 최적화 되어야 합니다.
기본적으로 WHERE절에 오는 필드들은 인덱스로 선언하는것이 좋구요,
단 'WHERE a=머 AND b=머머' 같이 사용된다면 다중열 인덱스를 사용하는것이 좋지요.
index(a,b) 처럼여...
또한 WHERE절에서 필들들의 조건 부합시 인덱스를 쓰기위해서는 기본연산자만 지원합니다. 'substring(a,1,4)=머머' 이런 구문(내장함수)이 들어가면 index를 타지 않습니다.
1. 인덱스는 책 뒤의 색인과 같은 역할을 합니다. 만약 순서대로 늘 데이터가 입력된다면 인덱스는 필요가 없을 겁니다. 인덱스가 적용된 곳의 특정값이 4,1,2,6,8 이라고 하여도 인덱스(색인)에는 1,2,4,6,8로 지정이 되어 있습니다. 이 부분은 RDBMS의 인덱스 동작원리에 대해서 조금 더 공부하면 될 듯 합니다.
2. index(a), index(b), index(a,b) 의 차이점은 다음과 같습니다. index(a), index(b)의 경우 a칼럼과 b칼럼에 독립적인 인덱스를 만드는 것입니다. 당연히 인덱스 생성에 조금 더 코스트가 들어갈 거구요. 검색시에는 a칼럼을 조건절로 사용하면 a index를 b칼럼을 조건절로 사용하면 b index를 사용합니다. a,b를 동시에 사용할 경우에는 index merge가 일어나게 됩니다.
index(a,b)인 경우에는 인덱스 생성 단계부터 a,b 로 정렬된 index가 생성되게 됩니다. 이 경우의 가장 큰 문제점은 b값으로 조건을 걸 경우에 index를 사용하지 못하게 되는 것입니다. 그 외의 insert/delete/update시의 비용은 적게 발생하며, a/b 값으로 검색시에도 비용이 적습니다. 자세한 내용은 역시 RDBMS의 인덱스 작동 원리를 살펴보심이..