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

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

DDD
DDD원래의
2024-12-14 03:55:14313검색

How to Solve the

인덱스 정의에 대한 "지정된 키가 너무 깁니다" 오류 처리

"지정된 키가 너무 깁니다. 최대 키 길이는 다음과 같습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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