>  기사  >  데이터 베이스  >  내 MySQL VARCHAR(512) 인덱스가 사용되지 않는 이유는 무엇입니까?

내 MySQL VARCHAR(512) 인덱스가 사용되지 않는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-25 03:56:12374검색

Why Isn't My MySQL VARCHAR(512) Index Being Used?

MySQL VARCHAR 인덱스 길이

MySQL 테이블의 최대 인덱스 길이는 767바이트입니다. 이는 열별로 계산되므로 복합 인덱스는 총 767바이트를 초과할 수 없습니다. 그러나 이 규칙에는 몇 가지 예외가 있습니다.

  • innodb_large_prefix 구성 옵션이 활성화되면 DYNAMIC 또는 COMPRESSED 행 형식을 사용하는 InnoDB 테이블의 인덱스 길이 제한이 3072바이트로 늘어납니다.
  • utf8 문자 집합의 경우 MySQL은 문자당 3바이트를 가정합니다. 따라서 인덱싱할 수 있는 최대 문자 수는 255(767/3)입니다.

특정 경우:

  • 귀하의 제품 테이블에 varchar(512) 유형의 이름 열이 있습니다.
  • 다음을 사용하여 이 열에 인덱스를 생성했습니다. ALTER TABLE 제품 ADD INDEX(name(512)).

생성한 인덱스가 최대 인덱스 길이인 767바이트를 초과하여 사용되지 않습니다. 이는 MySQL이 UTF-8 문자당 3바이트, 512자 * 3바이트/문자 = 1536바이트를 가정하기 때문입니다.

이 문제를 해결하려면 다음을 수행할 수 있습니다.

  • 색인 길이를 255자로 줄이거나 적습니다.

    ALTER TABLE products ADD INDEX (name(255));
  • innodb_large_prefix 구성 옵션을 활성화하고 DYNAMIC 또는 COMPRESSED 행 형식을 사용하세요.

    SET innodb_large_prefix = ON;
    
    ALTER TABLE products ROW_FORMAT=COMPRESSED;

추가 참고:

  • 주로 ASCII 문자(문자당 1바이트)를 저장하는 경우 최대 767바이트의 인덱스를 지정할 수 있습니다.
  • 저장이 가능합니다. utf8mb4 문자 세트를 사용하는 4바이트 문자입니다. 하지만 이렇게 하면 인덱싱할 수 있는 최대 문자 수가 더욱 줄어듭니다.

위 내용은 내 MySQL VARCHAR(512) 인덱스가 사용되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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