해결된 질문
작성
·
296
·
수정됨
0
실무 요구사항에서 blob, text, 긴 varchar와 같은 칼럼을 인덱싱하는 경우가 있을까요?
당장 기억나는건 게시글 내용 검색 밖에 생각이 안나네요..
그리고 요 아래글에 나와있는 prefix index의 한계점도 맞는 말일까요?
https://stackoverflow.com/questions/31526618/mysql-prefix-index-vs-index
(아래는 챗지피티가 요약해준거라 정확하지 않을 수 있습니다 ㅠ)
인덱스를 통해 "가능한" 행들을 먼저 찾고, 이후 실제 데이터 행을 검색하여 추가 필터링을 수행(두 단계를 거치므로 인덱스를 사용하지 않을때보다 더 많은 시간 소요..?)
2.정렬(sorting)이나 그룹화(grouping) 작업에는 사용되지 않음.
ORDER BY
절을 명시적으로 사용하지 않는 한 결과의 순서는 보장되지 않음
커버링 인덱스로 사용 불가
답변 1
1
안녕하세요~ 질문 남겨주셔서 감사합니다.
먼저, Prefix 인덱스는 꽤 다양하게 사용될 수 있는데요.
게시글 본문 내용을 색인하는 경우
이커머스 플랫폼에서 상품 설명이 저장된 긴 내용을 색인하는 경우
로그 데이터나 사용자의 행동을 기록하는 텍스트 필드에서 색인하는 경우
그리고 다음 질문 주신 내용인 prefix index의 한계점도 일부 맞는 말입니다:
Prefix 인덱스는 해당 prefix로 시작하는 모든 행을 먼저 찾은 다음, 실제 데이터를 검색하여 추가적인 필터링을 수행해야 합니다. 이렇게 두 단계를 거치지만 인덱스를 사용하지 않는 경우보다는 빠를거에요. 물론 인덱스 검색도 전체 데이터의 20~25%이상 조회하는거라면 풀스캔이 더 빠르긴 하겠죠.
Prefix 인덱스는 ORDER BY 나 GROUP BY 절에서의 정렬이나 그룹화 작업에 효과적이지 않아요. 이건 인덱스가 전체 값을 포함하지 않기 때문에, MySQL이 결과의 정확한 순서를 보장할 수 없기 때문이에요.
커버링 인덱스는 쿼리가 필요로 하는 모든 데이터를 인덱스에서 직접 가져올 수 있을 때 사용되는데요. Prefix 인덱스는 필드의 일부만을 포함하므로, 쿼리가 해당 필드의 전체 데이터를 필요로 하는 경우 추가적인 디스크 접근이 필요하기 때문에 사용할 수 없어요.