MySQL의 varchar 인덱스 길이 제한이 버전마다 다른 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-22 00:44:14
원래의
553명이 탐색했습니다.

Why Does MySQL's varchar Index Length Limit Differ Between Versions?

MySQL varchar 인덱스 길이

SQL 쿼리 성능 문제를 탐색하는 동안 사용자는 products.name 열에 인덱스를 추가하여 쿼리를 최적화하려고 시도했습니다. varchar(512)로 정의됩니다. product_name_idx(name(512))로 지정된 원래 인덱스는 접두사 인덱스로 식별되어 정렬에 사용되지 않습니다.

이 문제를 해결하기 위해 사용자는 이름 열을 자르려고 했습니다. varchar(255)로. 이 변경 이후 후속 EXPLAIN 문은 인덱스가 사용되고 있음을 나타냅니다.

이 동작은 MySQL이 UTF-8 문자 길이에 관해 가정하는 데서 비롯됩니다. MySQL에서 단일 열의 최대 인덱스 크기는 767바이트입니다. MySQL 8.0 이전에는 utf8 문자 세트가 문자당 최대 3바이트로 제한되었습니다. 그러나 MySQL 8.0에서는 이것이 변경되어 이제 utf8mb3은 더 이상 사용되지 않으며 문자당 최대 4바이트를 지원하는 utf8mb4로 대체되었습니다.

8.0 이전의 MySQL 버전에서는 기본값보다 큰 인덱스 길이를 지정합니다. varchar(255) 열에 대해 255자를 초과하면 오류가 발생합니다. 이는 MySQL이 UTF-8에 대해 문자당 3바이트를 가정하고 256자 인덱스가 767바이트 제한을 초과하기 때문입니다.

MySQL 8.0 및 utf8mb4 문자 세트에서는 문자당 3바이트라는 가정이 여전히 적용됩니다. . 그러나 압축된 동적 행 형식이 도입되면서 인덱스 키 접두사는 최대 3072바이트가 될 수 있습니다. 결과적으로 더 많은 문자를 사용하는 varchar 열에 인덱스를 생성할 수 있습니다.

요약하자면, 이전 MySQL 버전에서는 varchar 열의 인덱스 길이 제한이 3바이트를 가정하여 255자였습니다. UTF-8 문자 및 최대 인덱스 크기는 767바이트입니다. MySQL 8.0 및 utf8mb4에서는 압축 및 동적 행 형식에 대한 이 제한이 완화되어 varchar 열에서 더 긴 인덱스를 사용할 수 있습니다.

위 내용은 MySQL의 varchar 인덱스 길이 제한이 버전마다 다른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿