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 중국어 웹사이트의 기타 관련 기사를 참조하세요!