>  기사  >  데이터 베이스  >  mysql에서 key_len 계산 방법에 대한 설명

mysql에서 key_len 계산 방법에 대한 설명

jacklove
jacklove원래의
2018-06-08 17:51:231968검색

mysql의 explain 명령어는 sql의 성능을 분석할 수 있는데, 그 중 하나가 key_len(인덱스의 길이) 통계이다. 이번 글에서는 mysql explain에서 key_len의 계산 방법을 분석해보겠습니다.

1. 테스트 테이블과 데이터를 생성합니다.

CREATE TABLE `member` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `age` tinyint(3) unsigned DEFAULT NULL, PRIMARY KEY (`id`), KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `member` (`id`, `name`, `age`) VALUES (NULL, 'fdipzone', '18'), (NULL, 'jim', '19'), (NULL, 'tom', '19');

2. 설명 보기

이름의 필드 유형은 varchar(20)이고 문자 인코딩은 utf8입니다. 문자가 3바이트를 차지하면 key_len은 20*3=60이어야 합니다.

mysql> explain select * from `member` where name='fdipzone';
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+| id | select_type | table  | type | possible_keys | key  | key_len | ref   | rows | Extra                 |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+|  1 | SIMPLE      | member | ref  | name          | name | 63      | const |    1 | Using index condition |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+

explain의 key_len은 63이며 이는 3 더 많습니다.
이름 필드는 NULL을 허용합니다. 이름을 NOT NULL로 변경하고 다시 테스트하세요

ALTER TABLE `member` CHANGE `name` `name` VARCHAR(20) NOT NULL;mysql> explain select * from `member` where name='fdipzone';
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+| id | select_type | table  | type | possible_keys | key  | key_len | ref   | rows | Extra                 |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+|  1 | SIMPLE      | member | ref  | name          | name | 62      | const |    1 | Using index condition |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+

이제 key_len은 62로 이전보다 1이 적지만 여전히 2가 더 많습니다. NULL 필드가 1바이트를 더 차지할 것은 확실합니다.
이름 필드 유형은 가변 길이 필드인 varchar입니다. varchar를 char로 변경하고 다시 테스트하세요

ALTER TABLE `member` CHANGE `name` `name` CHAR(20) NOT NULL;mysql> explain select * from `member` where name='fdipzone';
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+| id | select_type | table  | type | possible_keys | key  | key_len | ref   | rows | Extra                 |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+|  1 | SIMPLE      | member | ref  | name          | name | 60      | const |    1 | Using index condition |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+

고정 길이 필드로 변경한 후 key_len은 60입니다. 예측과 일치합니다.
요약: 가변 길이 필드를 사용하려면 추가로 2바이트가 필요하고, NULL을 사용하려면 추가로 1바이트가 필요합니다. 인덱싱된 필드의 경우 고정 길이 및 NOT NULL 정의를 사용하는 것이 가장 좋습니다 , 성능을 향상시킵니다.

이 글에서는 mysql explain의 key_len 계산 방법을 설명하고 있습니다. 관련 내용은 PHP 중국어 홈페이지를 참고해주세요.

관련 권장사항:
curl을 사용하여 php를 통해 IP 및 소스 액세스를 시뮬레이션하는 방법

mysql을 통해 NULL 데이터 방법 변환

가변 매개변수 수를 사용하는 PHP 함수 관련 콘텐츠

위 내용은 mysql에서 key_len 계산 방법에 대한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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