search
HomeDatabaseMysql TutorialWhat is the meaning of key_len in mysql explain and how to calculate it

Preface

There is a column of key_len in the result of executing explain in Mysql, so what is the meaning of key_len?

key_len: Indicates the number of bytes used by the index. Based on this value, the usage of the index can be judged. Especially when combining indexes, it is very important to judge how many parts of the index are used.

Notes on calculating key_len:

  • Additional information on index fields: can be divided into variable-length and fixed-length data types for discussion. When index fields When it is a fixed-length data type, such as char, int, datetime, a mark is required to indicate whether it is empty. This mark occupies 1 byte (for fields that are not null, this 1 byte is not required); for variable-length fields Data types, such as varchar, need to have length information in addition to the empty mark, which takes up two bytes.

  • For character sets such as char, varchar, blob, text, etc., the length of key len is also related to the character set. One character of latin1 occupies 1 byte, and one character of gbk occupies one byte. 2 bytes, one UTF8 character occupies 3 bytes.

Example:

##user char(30) utf8key_len=30*3 1 Each character of utf8 is 3 bytes, NULL is allowed, add 1 byte##user varchar(30) not null utf8##user varchar(30) utf8key_len=30*3 2 1utf8 each character is 3 bytes, NULL is allowed, add 1 byte, variable length data type, add 2 bytesdetail text(10) utf8key_len=30*3 2 1TEXT intercepted part is regarded as a dynamic column type. Note: key_len only indicates the index column that is selected when used for conditional filtering in where, and does not include the order by/group by part that is selected. index column.
Column type KEY_LEN Remarks
id int key_len = 4 1 int is 4bytes, NULL is allowed, add 1byte
id bigint not null key_len=8 bigint is 8bytes
key_len=30*3 2 utf8 each character is 3 bytes, variable length data type, add 2 bytes

For example, there is a joint index idx (c1, c2, c3), and the three columns are all int not null, then in the following SQL execution plan, the value of key_len is 8 instead of 12:

select ... from tb where c1=? and c2=? order by c1;
Example

The following is a specific example to illustrate, table structure:

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;

The result of executing explain is as follows:

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

You can see a= The results of 0&b>0 and a>0&b=0 explain are "almost" the same. They both use the index index1, and they are both the results obtained by the range index (that is, scanning the index range). The only difference is key_len. Based on the index length key_len, you can infer how many dimensions are used by the multidimensional index. (MySQL indexes are all prefix indexes)

index1 is a two-dimensional index KEY index1 (a,b), so the length should be 4 4.

a=0&b>0 key_len is 8, which means that the result can be obtained only by using the index. First use a=0 to find the tree node, and then filter according to b>0 below it to get the result. That is, you can get the result "completely" by using the index.

a>0&b=0 key_len is 4, indicating that only the first dimension of the prefix index is used, only a>0 is used to get the result (primary key), and then the entire key_len is read in the primary key index (clustered index) OK, filter the relevant data based on b=0 and get the result. That is, "incomplete" uses the index to get the result.

The above is the detailed content of What is the meaning of key_len in mysql explain and how to calculate it. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:亿速云. If there is any infringement, please contact admin@php.cn delete
MySQL BLOB : are there any limits?MySQL BLOB : are there any limits?May 08, 2025 am 12:22 AM

MySQLBLOBshavelimits:TINYBLOB(255bytes),BLOB(65,535bytes),MEDIUMBLOB(16,777,215bytes),andLONGBLOB(4,294,967,295bytes).TouseBLOBseffectively:1)ConsiderperformanceimpactsandstorelargeBLOBsexternally;2)Managebackupsandreplicationcarefully;3)Usepathsinst

MySQL : What are the best tools to automate users creation?MySQL : What are the best tools to automate users creation?May 08, 2025 am 12:22 AM

The best tools and technologies for automating the creation of users in MySQL include: 1. MySQLWorkbench, suitable for small to medium-sized environments, easy to use but high resource consumption; 2. Ansible, suitable for multi-server environments, simple but steep learning curve; 3. Custom Python scripts, flexible but need to ensure script security; 4. Puppet and Chef, suitable for large-scale environments, complex but scalable. Scale, learning curve and integration needs should be considered when choosing.

MySQL: Can I search inside a blob?MySQL: Can I search inside a blob?May 08, 2025 am 12:20 AM

Yes,youcansearchinsideaBLOBinMySQLusingspecifictechniques.1)ConverttheBLOBtoaUTF-8stringwithCONVERTfunctionandsearchusingLIKE.2)ForcompressedBLOBs,useUNCOMPRESSbeforeconversion.3)Considerperformanceimpactsanddataencoding.4)Forcomplexdata,externalproc

MySQL String Data Types: A Comprehensive GuideMySQL String Data Types: A Comprehensive GuideMay 08, 2025 am 12:14 AM

MySQLoffersvariousstringdatatypes:1)CHARforfixed-lengthstrings,idealforconsistentlengthdatalikecountrycodes;2)VARCHARforvariable-lengthstrings,suitableforfieldslikenames;3)TEXTtypesforlargertext,goodforblogpostsbutcanimpactperformance;4)BINARYandVARB

Mastering MySQL BLOBs: A Step-by-Step TutorialMastering MySQL BLOBs: A Step-by-Step TutorialMay 08, 2025 am 12:01 AM

TomasterMySQLBLOBs,followthesesteps:1)ChoosetheappropriateBLOBtype(TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB)basedondatasize.2)InsertdatausingLOAD_FILEforefficiency.3)Storefilereferencesinsteadoffilestoimproveperformance.4)UseDUMPFILEtoretrieveandsaveBLOBsco

BLOB Data Type in MySQL: A Detailed Overview for DevelopersBLOB Data Type in MySQL: A Detailed Overview for DevelopersMay 07, 2025 pm 05:41 PM

BlobdatatypesinmysqlareusedforvoringLargebinarydatalikeImagesoraudio.1) Useblobtypes (tinyblobtolongblob) Basedondatasizeneeds. 2) Storeblobsin Perplate Petooptimize Performance.3) ConsidersxterNal Storage Forel Blob Romana DatabasesizerIndimprovebackupupe

How to Add Users to MySQL from the Command LineHow to Add Users to MySQL from the Command LineMay 07, 2025 pm 05:01 PM

ToadduserstoMySQLfromthecommandline,loginasroot,thenuseCREATEUSER'username'@'host'IDENTIFIEDBY'password';tocreateanewuser.GrantpermissionswithGRANTALLPRIVILEGESONdatabase.*TO'username'@'host';anduseFLUSHPRIVILEGES;toapplychanges.Alwaysusestrongpasswo

What Are the Different String Data Types in MySQL? A Detailed OverviewWhat Are the Different String Data Types in MySQL? A Detailed OverviewMay 07, 2025 pm 03:33 PM

MySQLofferseightstringdatatypes:CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM,andSET.1)CHARisfixed-length,idealforconsistentdatalikecountrycodes.2)VARCHARisvariable-length,efficientforvaryingdatalikenames.3)BINARYandVARBINARYstorebinarydata,similartoC

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools