Heim  >  Artikel  >  Datenbank  >  Eine Erläuterung der Berechnungsmethode von key_len in MySQL

Eine Erläuterung der Berechnungsmethode von key_len in MySQL

jacklove
jackloveOriginal
2018-06-08 17:51:231899Durchsuche

Der EXPLAIN-Befehl von MySQL kann die Leistung von SQL analysieren, darunter die Statistik von key_len (die Länge des Index). In diesem Artikel wird die Berechnungsmethode von key_len in MySQL erläutert.

1. Testtabelle und Daten erstellen

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. Erklärung anzeigen

Der Feldtyp von

name ist varchar(20), die Zeichenkodierung ist utf8, ein Zeichen belegt 3 Bytes, dann sollte key_len 20*3= sein 60. Die key_len von

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 ist 63, also 3 mehr.
Das Namensfeld erlaubt NULL, Namen in NOT NULL ändern und erneut testen

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 |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+

Jetzt ist key_len 62, 1 weniger als zuvor, aber immer noch 2 mehr. Es ist sicher, dass ein NULL-Feld ein weiteres Byte belegen wird.
Der Namensfeldtyp ist Varchar, ein Feld mit variabler Länge. Varchar in char ändern und erneut testen

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 |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+

Ändern auf feste Länge Nach dem Feld ist key_len 60, was mit der Vorhersage übereinstimmt.
Zusammenfassung: Die Verwendung von Feldern variabler Länge erfordert zusätzliche 2 Bytes, die Verwendung von NULL erfordert zusätzliche 1 Bytes, Daher Für indizierte Felder ist es am besten, Definitionen mit fester Länge und NOT NULL zu verwenden, um die Leistung zu verbessern.

In diesem Artikel wird die Berechnungsmethode von key_len in MySQL erläutert. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:
So verwenden Sie Curl, um IP- und Quellzugriff über PHP zu simulieren

NULL-Datenmethode über MySQL konvertieren

Verwandte Inhalte zu PHP-Funktionen mit variabler Anzahl von Parametern

Das obige ist der detaillierte Inhalt vonEine Erläuterung der Berechnungsmethode von key_len in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn