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