Maison  >  Article  >  base de données  >  Une explication de la méthode de calcul de key_len dans MySQL Explication

Une explication de la méthode de calcul de key_len dans MySQL Explication

jacklove
jackloveoriginal
2018-06-08 17:51:231952parcourir

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

varchar(20)

, 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 est
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 |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+
63

, soit 3 de plus.
Le champ de nom autorise NULL, Changez le nom en NOT NULL et testez à nouveau

Maintenant, key_len est
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

60
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.

Recommandations associées :

Comment utiliser curl pour simuler l'accès IP et source via php



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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn