인덱스를 생성하면, 해당 column에 대한 정렬된 키-값
쌍을 생성한다. 이 키-값
쌍은 인덱스 테이블에 저장되며, 이 테이블은 빠른 검색을 위해 메모리에 로딩되거나 디스크에 저장된다. 키
는 인덱스 column의 값이 저장되며, 값
으로는 해당하는 레코드의 위치 정보가 저장된다.
답변을 하기 위해, 선택도
와 카디널리티
의 개념을 알아야한다.
조건절에서 선택된 레코드 수 / 전체 레코드 수
컬럼의 중복되지 않는 값의 개수
인덱스를 생성하는 것은 디스크 공간을 차지하고, 쿼리 수행 시 인덱스를 스캔하는 작업이 추가되어야 하기 때문에 성능에 영향을 줄 수 있다. 인덱스는 별도의 저장 공간을 차지하므로, 모든 컬럼에 인덱스를 생성하는 것은 데이터베이스 용량을 크게 증가시킬 수 있다.
만약 true 값의 비율이 매우 작고, true 값으로 검색하는 쿼리가 자주 수행한다면, 해당 컬럼에 인덱스를 추가하는 것이 유용할 수도 있다. 하지만, 이 경우 인덱스가 차지하는 용량과 인덱스를 업데이트하느 ㄴ비용이 불필요하게 높아질 수 있다.
인덱스는 데이터베이스에서 데이터를 빠르게 검색하기 위해 사용됩니다. 따라서 인덱스를 생성할 column은 데이터베이스에서 자주 검색되는 column 이어야 합니다. 마찬가지로, 자주 조인되는 column은 다른 테이블에서 자주 검색되는 column 이므로 인덱스를 생성하는 것이 성능 향상에 큰 도움이 됩니다.
선택도가 높은 column은 조건절에서 매우 많은 레코드가 선택될 가능성이 있습니다. 이러한 경우 인덱스를 사용하더라도 많은 레코드가 선택되므로 인덱스 검색에 대한 성능 향상 효과가 미비합니다.
카디널리티가 낮은 column에 인덱스를 생성하면, 해당 column의 값이 많이 중복되므로 인덱스를 사용하더라도 많은 레코드가 선택됩니다.
수정 작업 시 인덱스를 갱신해야 하므로 데이터베이스의 성능을 저하시킬 수 있습니다. 또한, 수정 작업 시 인덱스 갱신에 따른 추가적인 로그 및 저장 공간이 필요하므로, 데이터베이스 용량도 증가할 수 있습니다.