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