개발을 하다보면 가끔 타이핑해서 코드를 작성하는 것보다 여러 생각을 하는데 더 시간을 할애할 때가 있다.
가령 쿼리 성능에 대해 고민할 때가 있다.
(가령 쿼리를 예로 들면 SELECT 검색 범위를 좁히기 위해 조건들을 촘촘히 건다든가, where~ in ( ) 문법에서 in사용을 지양한다던가, inner join, 인덱스에 따른 join on, where조건의 순서 등등, 그리고 쿼리 실행 계획을 확인하면서 최적의 실행이 되도록 쿼리를 수정한다든가)
그 중 인덱스를 자주 사용하게 되지만 생성함에 있어서도 잘못 기준을 잡으면 FULL TABLE SCAN이 발생해서 쿼리 성능이 나빠질 수도 있다.

"자, 차례대로, 천천히, 한 장씩 읽어보자."
인덱스를 알아보자면,
인덱스가 존재하면 데이터베이스는 인덱스 탐색을 통해 검색 ★범위를 좁히고 필요한 데이터에 빠르게 접근할 수 있다.
검색 범위에 대한 힌트가 없는 상태에서 데이터베이스는 모두 순차적으로 탐색할 수 밖에 없다.
때문에 인덱스도 인덱스지만 WHERE 조건만 잘 줘도 조회 성능이 대폭 향상한다.
인덱스 저장 위치는 DBMS별로 다르겠지만, 대부분 인덱스를 별도의 파일로 저장한다.
MySQL MyISAM의 경우 MYI(MySQL Index)파일에 저장한다.
인덱스 설정 시 insert, delete, update가 계속 수행된다면 계속 정렬을 해주면서 그에 따른 부하가 발생한다고 알고있다.
때문에 특정 쿼리를 짜면서 속도가 안 나온다고 마음대로 테이블의 인덱스 순서라든가, 수정을 가하면 우려스러운 일들이 일어날 수 있다.
하지만 대부분의 경우 잘 짜여진 인덱스 설정은 조회 속도를 높여 사용자의 경험을 대폭 향상시켰다.