인덱스는 테이블에 붙여진 색인이며, 검색속도를 향상시키는 역할을 한다.
여기서 "검색" 이란, SELECT 명령에 WHERE 구로 조건을 지정하고 그에 일치하는 행을 찾는 일련의 과정을 말한다.
따라서, 테이블에 인덱스가 지정되어 있으면 효율적으로 검색할 수 있으므로 WHERE 로 조건이 지정된 SELECT 명령의 처리 속도가 향상된다.
원하는 수치와 비교해서 더 크면 오른쪽, 작으면 왼쪽의 가지를 조사해나간다.
인덱스를 작성하면 애초에 이진 트리구조로 데이터를 저장하기 때문에 이진탐색만 하면 된다.
이진트리에서 같은 값을 가지는 노드를 여러 개 만들 수 없다는 특징은, 키값이 unique 한 컬럼에 대해서만 해당되는 이야기다.
키값이 unique 하지 않으면 가지가 두개가 아니라 세개 (하나는 같은경우) 가 된다.
CREATE INDEX 인덱스명 ON 테이블명 (컬럼명1, 컬럼명2, ...)
EXPLAIN SELECT * FROM sample62 WHERE a = 'a';
sample62의 a 컬럼에 대해서 인덱스를 작성했기 때문에, possible_keys 와 key 컬럼을 보면 해당 인덱스가 활용된 것을 볼 수 있다.
WHERE 조건을 바꿔서 a 열을 사용하지 않도록 한다면 당연한 얘기지만 인덱스를 사용할 수 없다.
만약 특정 컬럼의 데이터가 yes 나 no 로 데이터의 종류가 두개밖에 없다면 이진탐색에 의한 효율성을 기대할 수 없다. 데이터의 종류가 적으면 적을수록 인덱스의 효율이 떨어진다.
반대로 서로 다른 값으로 여러 종류의 데이터가 존재하면 그만큼 인덱싱의 효율은 좋아진다.
따라서 인덱스를 무조건 쓴다고 좋은것이 아니라, 언제 써야할 것인지를 고려하고 써야한다.
SQL 첫걸음 29강 : 인덱스의 작성과 삭제