범위 쿼리가 포함된 복합 인덱스의 높은 카디널리티 열 배치
범위 조건과 관련된 복합 인덱스가 있는 테이블을 쿼리할 때 인덱스 내의 열은 성능에 큰 영향을 미칠 수 있습니다.
기본 키(did, 파일 이름)와 두 개의 복합 키가 있는 테이블 파일을 고려하세요. 인덱스: INDEX(filetime, ext) 및 INDEX(ext, filetime). 두 인덱스 모두 ext보다 카디널리티가 높은 파일 시간 열을 포함합니다.
쿼리:
WHERE ext = '...' AND filetime BETWEEN ... AND ...
는 ext와 filetime을 모두 기반으로 데이터에 액세스해야 합니다. 질문이 생깁니다. 이러한 쿼리에 어떤 인덱스가 최적입니까?
분석
최적의 인덱스를 결정하기 위해 FORCE INDEX를 사용하고 실행 계획을 검토할 수 있습니다.
-- Force range on filetime first FORCE INDEX(fe) SELECT COUNT(*), AVG(fsize) FROM files WHERE ext = 'gif' AND filetime >= '2015-01-01' AND filetime = '2015-01-01' AND filetime출력에 따르면 INDEX(ext, filetime) (ef)의 행 수가 훨씬 적어 스캔 효율성이 더 우수함을 나타냅니다.
옵티마이저 추적
옵티마이저의 동작을 더 자세히 분석하기 위해 옵티마이저를 사용할 수 있습니다. 추적:
SELECT explain_format = 'JSON'; SELECT COUNT(*), AVG(fsize) FROM files WHERE ext = 'gif' AND filetime >= '2015-01-01' AND filetime추적에서는 최적화 프로그램이 인덱스의 두 열을 모두 사용하여 데이터를 필터링하고 가져올 수 있기 때문에 INDEX(ext, filetime)를 선택한다는 것을 보여줍니다. 반면 INDEX(filetime, ext)는 첫 번째 열(filetime)만 필터링에 사용할 수 있습니다.
결론
분석을 바탕으로 다음과 같은 결론을 내릴 수 있습니다. draw:
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3