> 데이터 베이스 > MySQL 튜토리얼 > MySQL 오류 '지정된 키가 너무 깁니다'가 나타나는 이유는 무엇입니까?

MySQL 오류 '지정된 키가 너무 깁니다'가 나타나는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-09 12:24:15
원래의
171명이 탐색했습니다.

Why Am I Getting the MySQL Error

MySql 오류: "지정된 키가 너무 깁니다"

MySql 데이터베이스를 쿼리할 때 "지정된 키가 너무 깁니다" 오류가 발생할 수 있습니다. 키 길이가 긴 테이블을 생성할 때. 이 문제는 단일 인덱스에서 여러 열을 활용할 때 자주 발생합니다.

pds_core_menu_items 테이블을 사용한 사례 연구

제공된 쿼리는 열 parent_menu_id, menu_link, 플러그인 및 별칭. 이 열은 VARCHAR(255) 데이터 유형입니다.

문제 설명

@Devart가 언급했듯이 이 열의 총 길이는 허용되는 최대 키 길이를 초과합니다. 1000바이트. 이러한 제한으로 인해 지정된 오류로 인해 인덱스 생성이 실패합니다.

해결책: 접두사 인덱싱

이 문제를 해결하는 가장 좋은 방법은 접두사 인덱싱을 사용하는 것입니다. 접두사 색인을 사용하면 원본 데이터의 왼쪽 하위 문자열만 색인화되어 색인 크기가 크게 줄어들고 효율성이 향상됩니다.

최적 접두사 길이 결정

각 열의 최적 접두사 길이를 확인하려면 다음 쿼리를 실행합니다.

SELECT
 ROUND(SUM(LENGTH(`column_name`)<10)*100/COUNT(`column_name`),2) AS pct_length_10,
 ROUND(SUM(LENGTH(`column_name`)<20)*100/COUNT(`column_name`),2) AS pct_length_20,
 ROUND(SUM(LENGTH(`column_name`)<50)*100/COUNT(`column_name`),2) AS pct_length_50,
 ROUND(SUM(LENGTH(`column_name`)<100)*100/COUNT(`column_name`),2) AS pct_length_100
FROM `table_name`;
로그인 후 복사

column_name을 분석 중인 열로 바꾸고 table_name을 해당 열이 포함된 테이블로 바꿉니다. 출력을 분석하여 가장 높은 비율의 행을 포함하는 가장 작은 하위 문자열 길이를 식별합니다.

업데이트된 쿼리

제공된 예에서 50자의 하위 문자열을 인덱싱하면 충분합니다. , 쿼리 결과에 표시된 대로입니다. 업데이트된 쿼리는 다음과 같습니다.

KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
로그인 후 복사

추가 참고 사항

INT(1) 및 INT(32) 데이터 유형을 사용할 때도 오류가 발생할 수 있습니다. 이러한 데이터 유형은 저장 크기나 값 범위에 영향을 미치지 않지만 ZEROFILL 옵션을 사용하는 경우 값이 표시되는 방식에 영향을 미칠 수 있습니다.

위 내용은 MySQL 오류 '지정된 키가 너무 깁니다'가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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