Es gibt eine Spalte von key_len im Ergebnis der Ausführung von EXPLAIN in MySQL. Was bedeutet also key_len?
key_len: Gibt die Anzahl der vom Index verwendeten Bytes an. Anhand dieses Werts kann die Verwendung des Index beurteilt werden. Insbesondere beim Kombinieren von Indizes ist es sehr wichtig zu beurteilen, wie viele Teile davon verwendet werden Index verwendet werden.
Zusätzliche Informationen für Indexfelder: kann in variable Länge und unterteilt werden Diskussion über lange Datentypen: Wenn das Indexfeld ein Datentyp mit fester Länge ist, z. B. char, int, datetime, ist eine Markierung erforderlich, um anzugeben, ob es 1 Byte belegt (für Felder, die dies nicht sind). null, dies ist nicht erforderlich. Für Datentypen variabler Länge, wie z. B. Varchar, sind zusätzlich zur Leermarke auch Längeninformationen erforderlich, die zwei Bytes belegen.
Bei Zeichensätzen wie char, varchar, blob, text usw. hängt die Länge des Schlüssels len auch davon ab, welchen Zeichensatz Latin1 einnimmt 1 Byte. Ein Zeichen in GBK belegt 2 Bytes und ein Zeichen in UTF8 belegt 3 Bytes.
Beispiel:
Spaltentyp | KEY_LEN # 🎜🎜# | Note|
---|---|---|
key_len = 4+1 | int ist 4 Bytes , NULL ist erlaubt, 1 Byte hinzufügen | |
key_len=8 | bigint ist 8 Bytes | |
key_len=30*3+1 | utf8 Jedes Zeichen ist 3 Byte groß , NULL ist erlaubt, 1 Byte hinzufügen | |
key_len=30*3+2#🎜🎜 # | utf8 Jedes Zeichen besteht aus 3 Bytes, Datentyp variabler Länge, 2 Bytes hinzufügen | |
key_len =30*3+2+1 | utf8 Jedes Zeichen besteht aus 3 Bytes, NULL ist zulässig, 1 Byte hinzufügen, Datentyp variabler Länge, 2 Bytes hinzufügen | #🎜🎜 ## 🎜🎜#detail text(10) utf8 |
TEXT abgefangener Teil, der als dynamischer Spaltentyp betrachtet wird. |
Zum Beispiel gibt es einen gemeinsamen Index idx (c1, c2, c3) und die drei Spalten sind alle int und nicht null, dann ist im folgenden SQL-Ausführungsplan der Wert von key_len ist 8 statt 12:select ... from tb where c1=? and c2=? order by c1;Beispiel
Das Folgende ist ein konkretes Beispiel zur Veranschaulichung der Tabellenstruktur:
CREATE TABLE `t4` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) NOT NULL DEFAULT '0', `b` int(11) NOT NULL DEFAULT '0', `c` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `index1` (`a`,`b`) ) ENGINE=InnoDB;
mysql> explain select * from t4 where a =0 and b > 0; +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+ | 1 | SIMPLE | t4 | range | index1 | index1 | 8 | NULL | 1 | Using where | +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+ mysql> explain select * from t4 where a > 0 and b = 0; +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+ | 1 | SIMPLE | t4 | range | index1 | index1 | 4 | NULL | 1 | Using where | +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+
Das obige ist der detaillierte Inhalt vonWas bedeutet key_len in MySQL und wie man es berechnet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!