정보처리기사

[Database] MySQL의 인덱스로 검색 요청을 빠르게 수행하는 쿼리 최적화

dongkeonkim 2023. 4. 13. 15:35
반응형

인덱스는 테이블의 검색 속도를 향상시키기 위해 사용되는 데이터 구조입니다.

 

테이블의 열(Column)에 대한 값을 미리 정렬하여 저장하는 것으로, 검색 시에 해당 열을 순차적으로 검색하는 것이 아니라 인덱스를 이용하여 빠르게 데이터를 찾아낼 수 있습니다.

일반적으로 WHERE 절에 사용되는 열에 대해서 생성됩니다. 만약 WHERE 절에 사용되는 열에 인덱스가 없다면, MySQL은 모든 레코드를 검색해야 하므로 성능이 저하될 수 있습니다.

생성 방법으로는 테이블 생성 시에도 생성할 수 있고, ALTER TABLE 문을 사용하여 생성할 수도 있습니다.

다만, 인덱스를 생성하면 테이블의 크기가 커지게 되므로, 인덱스를 생성할 때에는 신중하게 결정해야 하고 INSERT, UPDATE, DELETE와 같은 데이터 변경 작업이 수행될 때 인덱스도 함께 변경되므로, 데이터 변경 작업이 많은 테이블에서는 인덱스의 영향도를 고려해야 합니다.

인덱스를 추가할 때는 다음과 같은 원칙을 고려해야 합니다.

 

1. 자주 검색되는 컬럼에 인덱스를 추가하는 것이 좋습니다. 그러나 고유성이 낮은 컬럼(예: 성별)은 인덱스를 추가해도 검색 속도 향상이 미미할 수 있습니다.


2. 인덱스 컬럼의 크기를 작게 유지하는 것이 좋습니다.

인덱스 컬럼이 크면 인덱스 생성 및 검색 속도가 느려질 수 있습니다. 또한 인덱스는 추가할수록 쓰기 작업(INSERT, UPDATE, DELETE)의 성능이 저하될 수 있습니다.

반응형