더북(TheBook)

마찬가지로 데이터베이스에서도 이러한 인덱스 기능을 쓸 수 있습니다. 인덱스는 필드 단위로 설정할 수 있습니다. 인덱스를 설정해 놓으면 특정 조건에서 어마어마하게 빠른 속도로 원하는 레코드를 찾을 수 있습니다. 어느 정도냐고요? O(n)과 O(log(n))의 차이입니다. 예를 들어 레코드가 1억 개인 테이블에서 인덱스 없이 검색하면 검색 연산을 1억 번 해야 하지만, 인덱스를 갖고 검색을 하면 몇십 번 이내에 검색이 끝납니다.

인덱스는 select 구문, 즉 검색만을 위한 것이 아닙니다. 기존 레코드를 변경하거나 레코드를 삭제할 때도 인덱스는 빨리 찾는 데 큰 도움이 됩니다.

예를 들어 다음 구문을 실행하면 table1에 있는 모든 레코드를 다 순회하면서 a = 100인 것을 찾지 않고, 인덱스를 이용해서 a = 100인 것을 매우 적은 횟수의 순회만으로도 다 찾아내서 지울 것입니다.

delete from table1 where a=100

테이블 하나에 인덱스를 2개 이상 넣는 것도 가능합니다. 예를 들어 table1의 필드 a, b, c 각각에 인덱스를 추가할 수 있습니다.

인덱스는 레코드 둘 이상을 찾아낸 후 그것들을 정렬하는 용도로도 사용할 수 있습니다. 인덱스가 없다면 정렬하는 데 많은 시간이 소요됩니다. 예를 들어 table1의 필드 a 값을 기준으로 정렬된 레코드 목록을 얻고 싶을 때, table1의 필드 a에 대한 인덱스를 추가해 놓으면 됩니다.

인덱스는 빠른 검색 용도뿐만 아니라, 중복된 값을 방지하는 용도로도 사용합니다. 인덱스에는 유니크(unique)라는 속성을 추가로 지정할 수 있습니다. 이 유니크 속성을 추가한 인덱스, 즉 유니크 인덱스가 있을 때, 인덱스에 해당하는 필드 값이 같은 레코드가 2개 이상 들어갈 수 없게 막아 주는 역할을 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.