• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    해결됨

실무에서 prefix index를 어떤 요구사항이 있을때 사용하는지 궁금합니다!

24.05.13 00:10 작성 24.05.13 00:10 수정 조회수 140

0

실무 요구사항에서 blob, text, 긴 varchar와 같은 칼럼을 인덱싱하는 경우가 있을까요?

당장 기억나는건 게시글 내용 검색 밖에 생각이 안나네요..

 

그리고 요 아래글에 나와있는 prefix index의 한계점도 맞는 말일까요?

https://stackoverflow.com/questions/31526618/mysql-prefix-index-vs-index

(아래는 챗지피티가 요약해준거라 정확하지 않을 수 있습니다 ㅠ)

  1. 인덱스를 통해 "가능한" 행들을 먼저 찾고, 이후 실제 데이터 행을 검색하여 추가 필터링을 수행(두 단계를 거치므로 인덱스를 사용하지 않을때보다 더 많은 시간 소요..?)

2.정렬(sorting)이나 그룹화(grouping) 작업에는 사용되지 않음.

  1. ORDER BY 절을 명시적으로 사용하지 않는 한 결과의 순서는 보장되지 않음

  1. 커버링 인덱스로 사용 불가

 

답변 1

답변을 작성해보세요.

1

안녕하세요~ 질문 남겨주셔서 감사합니다.

 

먼저, Prefix 인덱스는 꽤 다양하게 사용될 수 있는데요.

  • 게시글 본문 내용을 색인하는 경우

  • 이커머스 플랫폼에서 상품 설명이 저장된 긴 내용을 색인하는 경우

  • 로그 데이터나 사용자의 행동을 기록하는 텍스트 필드에서 색인하는 경우

 

그리고 다음 질문 주신 내용인 prefix index의 한계점도 일부 맞는 말입니다:

  • Prefix 인덱스는 해당 prefix로 시작하는 모든 행을 먼저 찾은 다음, 실제 데이터를 검색하여 추가적인 필터링을 수행해야 합니다. 이렇게 두 단계를 거치지만 인덱스를 사용하지 않는 경우보다는 빠를거에요. 물론 인덱스 검색도 전체 데이터의 20~25%이상 조회하는거라면 풀스캔이 더 빠르긴 하겠죠.

  • Prefix 인덱스는 ORDER BY GROUP BY 절에서의 정렬이나 그룹화 작업에 효과적이지 않아요. 이건 인덱스가 전체 값을 포함하지 않기 때문에, MySQL이 결과의 정확한 순서를 보장할 수 없기 때문이에요.

  • 커버링 인덱스는 쿼리가 필요로 하는 모든 데이터를 인덱스에서 직접 가져올 수 있을 때 사용되는데요. Prefix 인덱스는 필드의 일부만을 포함하므로, 쿼리가 해당 필드의 전체 데이터를 필요로 하는 경우 추가적인 디스크 접근이 필요하기 때문에 사용할 수 없어요.