Maison > Article > base de données > Une explication de la méthode de calcul de key_len dans MySQL Explication
La commande expliquer de mysql peut analyser les performances de SQL, dont les statistiques de key_len (la longueur de l'index). Cet article analysera la méthode de calcul de key_len dans MySQL Explication.
1. Créer une table de test et des données
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. Le type de champ de
name est
, le codage des caractères est utf8, un caractère occupe 3 octets, alors key_len doit être 20* 3=60. Le key_len de
explain estmysql> 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 | +----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+63
, soit 3 de plus.
Le champ de nom autorise NULL, Changez le nom en NOT NULL et testez à nouveau
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 | +----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+62
, 1 de moins qu'avant, mais quand même 2 de plus. Il est certain qu'un champ NULL occupera un octet de plus.
Le type de champ de nom est varchar, qui est un champ de longueur variable Changez varchar en char et testez à nouveauRemplacez par Après avoir corrigé le champ de longueur, key_len est
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 | +----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+, ce qui est cohérent avec la prédiction.
Résumé :
L'utilisation de champs de longueur variable nécessite 2 octets supplémentaires, l'utilisation de NULL nécessite 1 octets supplémentaires, Par conséquent, pour les champs indexés, il est préférable d'utiliser des définitions de longueur fixe et NON NULL pour améliorer les performances. Cet article explique la méthode de calcul de key_len dans MySQL Explication. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois.
Convertir la méthode de données NULL via MySQL
Contenu associé sur les fonctions php utilisant un nombre variable de paramètres
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!