2012-07-29 2 views
1

mysql 인덱스의 key_len이 '너무 깁니다'여부를 결정하는 일반 매개 변수는 무엇입니까?mysql 인덱스의 key_len 최적화

예를 들어, 더 긴 VARCHAR 열의 경우, 키를 갖는 것이 더 길어집니다. 한 경우에는 key_len=767 인 색인이 있습니다. 어떤 경우에는 내가 좋아하는 뭔가를해야한다 : 테이블이 많은 행을 보유하고있는 경우

ADD INDEX (title(50)); 

답변

2

및/또는 당신은 SELECT ... ORDER BY 쿼리를 많이, 관련 분야 (들)에 인덱스 (들)을 갖는 것은 SELECT 속도 것을 실행할 경우 검색어.
그러나 인덱스를 업데이트해야하기 때문에 이러한 필드에 대한 삽입, 쓰기 및 업데이트 속도가 느려집니다.
테이블의 모든 색인은 디스크 공간을 사용합니다. 디스크 공간이 부족한 경우 작은 key_len을 사용하십시오. 그러나 쿼리가 더 느리게 실행됩니다.

하나의 열만있는 테이블을 상상해보십시오. 처음 세 문자 만 인덱싱됩니다. 표는 포함
티모
티모시

디모데
Timmo

이 쿼리는 내용이 부분적으로 인덱스되어 있기 때문에,하지만, 그것은 완전한 할 추가 처리가 필요합니다 인덱스를 사용합니다
SELECT * FROM `my_table` ORDER BY `name` ASC 

정렬하면 실행 시간이 오래 걸립니다.

MySQL 인덱스는 최대 1000 바이트 (InnoDB 테이블의 경우 767 바이트) 일 수 있습니다.

The Innodb documentation says (link)

: 이노에서
긴 PRIMARY KEY (긴 합성 값을 형성하는 긴 값, 또는 다수의 열 한 열 중 하나)를 갖는 많은 디스크 공간을 낭비한다. 행의 기본 키 값은 동일한 행을 가리키는 모든 2 차 인덱스 레코드에서 복제됩니다. (14.3.11 절. "InnoDB 테이블과 인덱스 구조"참조). 기본 키가 긴 경우 AUTO_INCREMENT 컬럼을 기본 키로 생성하거나 전체 컬럼 대신 긴 VARCHAR 컬럼의 접두사를 인덱싱한다.