>데이터 베이스 >MySQL 튜토리얼 >MySQL의 '지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다.' 오류를 해결하는 방법은 무엇입니까?

MySQL의 '지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다.' 오류를 해결하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-10 22:34:16557검색

How to Solve MySQL's

MySQL 오류: "지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다."

문제:

현재 생성할 때 "지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다"라는 오류가 발생합니다. 특정 쿼리가 포함된 MySQL 테이블입니다. 이 쿼리에는 여러 열과 그 중 일부에 대한 결합된 인덱스가 포함된 테이블을 생성하는 작업이 포함됩니다.

설명:

이 오류는 인덱스된 열의 전체 길이가 다음을 초과할 때 발생합니다. MySQL에서 허용되는 최대 키 길이는 1000바이트입니다. 이 경우 "인덱스" 키는 VARCHAR 데이터 유형의 4개 열에 걸쳐 있으며 각 열의 최대 길이는 255자입니다.

해결책:

As 제공된 솔루션에 언급된 바와 같이 이 오류의 근본 원인은 인덱싱된 열의 길이가 너무 길기 때문입니다. 이 문제를 해결하려면 데이터의 일부만 색인화하는 접두사 색인을 사용하는 것이 좋습니다. 이는 인덱스를 정의할 때 인덱스된 각 열의 길이를 지정함으로써 달성됩니다. 예:

...
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
...

최적의 접두사 길이 결정:

각 열에 가장 적합한 접두사 길이를 결정하려면 데이터 분포를 분석하는 것이 좋습니다. 다음과 같은 쿼리를 사용할 수 있습니다.

SELECT
 ROUND(SUM(LENGTH(`menu_link`)<10)*100/COUNT(`menu_link`),2) AS pct_length_10,
 ROUND(SUM(LENGTH(`menu_link`)<20)*100/COUNT(`menu_link`),2) AS pct_length_20,
 ROUND(SUM(LENGTH(`menu_link`)<50)*100/COUNT(`menu_link`),2) AS pct_length_50,
 ROUND(SUM(LENGTH(`menu_link`)<100)*100/COUNT(`menu_link`),2) AS pct_length_100
FROM `pds_core_menu_items`;

이 쿼리는 특정 길이보다 작거나 같은 문자열이 있는 행의 비율을 제공합니다. 이러한 결과를 바탕으로 과도한 공간을 낭비하지 않고 데이터의 상당 부분을 포괄하는 접두사 길이를 선택할 수 있습니다. 예를 들어 문자열의 80%가 20자 미만인 경우 접두사 길이는 50이면 충분할 수 있습니다.

추가 참고:

다음 사항도 중요합니다. 원래 쿼리에 사용된 INT(1) 및 INT(32) 데이터 유형은 저장 공간이나 값 범위에 영향을 미치지 않습니다. INT는 항상 -2,147,483,648에서 2,147,483,647까지의 값을 허용하는 32비트 정수 유형입니다. 이러한 경우 숫자 인수는 주로 디스플레이 패딩에 영향을 미치며 기본 저장소에는 영향을 주지 않습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.