집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에서 '지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다.' 오류를 해결하는 방법은 무엇입니까?
인덱스 정의에 대한 "지정된 키가 너무 깁니다" 오류 처리
"지정된 키가 너무 깁니다. 최대 키 길이는 다음과 같습니다. 1000바이트"는 테이블에 정의된 인덱스 길이에 문제가 있음을 나타냅니다. 이 오류는 데이터베이스 서버 버전, 인덱스 유형, 열 데이터 등의 요인에 의해 영향을 받을 수 있으므로 과거에 쿼리가 성공적으로 작동했더라도 발생할 수 있습니다.
제공된 쿼리에서:
CREATE TABLE IF NOT EXISTS `pds_core_menu_items` ( ... KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`) ... )
인덱스 인덱스는 parent_menu_id, menu_link, 플러그인 및 별칭의 4개 열에 정의됩니다. 이러한 열의 총 길이가 1000바이트를 초과하여 오류가 발생합니다.
이 문제를 해결하려면 다음과 같은 몇 가지 접근 방식이 있습니다.
1. 인덱스 열 길이 줄이기:
오류를 수정하는 가장 간단한 방법은 인덱스 열의 길이를 줄이는 것입니다. 이는 열 데이터의 일부만 색인화되는 접두사 색인을 사용하여 수행할 수 있습니다. 예:
KEY `index` (`parent_menu_id`,`menu_link`(50),`plugin`(50),`alias`(50))
접두사 인덱스는 효율적인 조회를 유지하면서 인덱스 크기를 크게 줄일 수 있으므로 권장됩니다.
2. 최적의 접두사 길이 결정:
각 열의 최적의 접두사 길이를 결정하려면 다음과 같은 쿼리를 사용하여 데이터 분포를 분석하는 것이 도움이 됩니다.
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`;
이 쿼리는 백분율을 제공합니다. 특정 길이보다 작은 열 값을 가진 행의 수입니다. 이러한 결과를 바탕으로 적절한 접두사 길이를 선택하여 우수한 성능을 유지하면서 인덱스 크기를 최소화할 수 있습니다.
추가 고려 사항:
오류가 있다는 점에 유의하는 것이 중요합니다. 모든 개별 열이 1000바이트보다 짧더라도 인덱스의 총 길이가 1000바이트를 초과하는 경우에도 발생할 수 있습니다. 따라서 여러 컬럼에 인덱스를 정의할 때는 결합된 길이를 고려해야 합니다.
또한 INT(1) 및 INT(32) 데이터 유형은 인덱스 길이 문제와 관련이 없습니다. 그러나 이러한 데이터 유형의 숫자 인수는 저장 또는 값 범위에 영향을 주지 않고 표시 중 형식 지정에 영향을 미친다는 점에 주목할 가치가 있습니다.
위 내용은 MySQL에서 '지정된 키가 너무 깁니다. 최대 키 길이는 1000바이트입니다.' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!