当前位置:网站首页>MySQL index hit level analysis
MySQL index hit level analysis
2022-07-07 17:39:00 【Ugly beyond the 38th parallel】
Mysql Index hit level
The result value is from good to bad :
- system/const, system stay mysql8 There seems to be no more . Generally, the unique result of primary key query will be const.
eq_ref: similar ref, The difference is that the index used is the only index , For each index key value , Only one record in the table matches , Simply speaking , It is used in multi table connection primary key perhaps unique key As a condition of Association- ref: The lookup criteria column uses an index and is not primary key and unique. Actually , It means that although index is used , But the value of the index column is not unique , Repeat . In this way, even if the index is used to quickly find the first data , Still can't stop , To scan a small area near the target value . But the advantage of it is that it doesn't need to scan the whole table , Because the index is ordered , Even if there are duplicate values , It's also scanning in a very small area .
- range: Index scan with range , be relative to index Full scan table , He has limits , So it's better than index
- index: Another form of full table scanning , But his scanning method is in the order of index
- all: Full table scan
preparation
Create a teacher list
CREATE TABLE teacher (
id INT ( 5 ),
NAME VARCHAR ( 20 ),
card_id INT ( 5 )
);
Create a teacher card information table
CREATE TABLE teacher_card (
id INT ( 5 ),
remark VARCHAR ( 20 )
);
Insert teacher information
insert into teacher values(1, ' Zhang San ', 1);
insert into teacher values(2, ' Li Si ', 2);
insert into teacher values(3, ' Wang Wu ', 3);
Insert teacher card information
insert into teacher_card values(1, ' Teacher Zhang's card ');
insert into teacher_card values(2, ' Miss Li's card ');
insert into teacher_card values(3, ' Miss Wang's card ');
const Type testing
Add the primary key index before the test
alter table teacher add constraint pk_teacher_id primary key(id);
The derived table has only one main query of data ; The derived table queries only one piece of data through the primary key , Then use this data to make the main query .
EXPLAIN select * from teacher where id=1
Get the results of the implementation plan :
+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| 1 | SIMPLE | teacher | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL |
+----+-------------+---------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
- Only one piece of data can be found SQL, be used for primary key or unique The index of ( Other index types do not belong to ).
- When there is only one piece of data in the primary key query , The type is const
eq_ref Type testing
to teacher_card Add primary key
alter table teacher_card add constraint pk_teacher_card_id primary key(id);
Analysis of teacher Table to index unique queries
explain select t.card_id from teacher t, teacher_card tc where t.card_id = tc.id;
explain select t.card_id from teacher t left join teacher_card tc on t.card_id = tc.id;
Get the results of the implementation plan
+----+-------------+-------+------------+--------+---------------+---------+---------+--------------------------------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+--------+---------------+---------+---------+--------------------------------+------+----------+-------------+
| 1 | SIMPLE | t | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | NULL |
| 1 | SIMPLE | tc | NULL | eq_ref | PRIMARY | PRIMARY | 4 | mysql_ref_index_test.t.card_id | 1 | 100.00 | Using index |
+----+-------------+-------+------------+--------+---------------+---------+---------+--------------------------------+------+----------+-------------+
Uniqueness index , The table index is associated with the primary key of another surface , Each data between the two tables should correspond one by one ( Each one should correspond one by one , One cannot correspond to multiple , There must be no correspondence ), The queried data is unique in the table , There can be no repetition .
ref Type testing
Non unique linear index , The data returned from the query of each index key is 0 Or more .
to teacher Tabular name Add an index to the field
alter table teacher add index index_teacher_name (name);
- according to name = Zhang San found two pieces of data
- according to name The value directly queried by the index is ref type .
sqlexplain select * from teacher where name = ' Zhang San ';
Implementation plan results :
+----+-------------+---------+------------+------+--------------------+--------------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+------+--------------------+--------------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | teacher | NULL | ref | index_teacher_name | index_teacher_name | 83 | const | 1 | 100.00 | NULL |
+----+-------------+---------+------------+------+--------------------+--------------------+---------+-------+------+----------+-------+
range Type testing
- Check the specified range line ,where After that is a range query (between、in、>、)
- see range Index of type
in The situation of
explain select * from teacher t where t.id in (1, 2);
Implementation plan results
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| 1 | SIMPLE | t | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 2 | 100.00 | Using where |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
between The situation of
explain select * from teacher where id between 1 and 2;
Implementation plan results
+----+-------------+---------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| 1 | SIMPLE | teacher | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 2 | 100.00 | Using where |
+----+-------------+---------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
Comparison
explain select * from teacher where id < 3;
Implementation plan results
+----+-------------+---------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| 1 | SIMPLE | teacher | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 2 | 100.00 | Using where |
+----+-------------+---------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
Range query the specified index , Its index type is range:
index Type testing
- Query all data in the index .
- Query all the data in the index , among
nameIt's index. - Go straight to the index , There's no need to go back
explain select name from teacher;
Implementation plan
+----+-------------+---------+------------+-------+---------------+--------------------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+-------+---------------+--------------------+---------+------+------+----------+-------------+
| 1 | SIMPLE | teacher | NULL | index | NULL | index_teacher_name | 83 | NULL | 3 | 100.00 | Using index |
+----+-------------+---------+------------+-------+---------------+--------------------+---------+------+------+----------+-------------+
all Type testing
- Query all the data in the table , Or query according to fields that are not indexes .
- That is to go through the whole table scanning , Can't go to the index .
EXPLAIN select * from teacher;
Implementation plan results
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE | teacher | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | NULL |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+
type Type summary :
system/const: The result is just one piece of data .eq_ref: There are many results , But every data is unique .ref: There are many results , But the data queried can be multiple , And the data can be repeated .range: Search the index fields for range queries .
边栏推荐
猜你喜欢
随机推荐
管理VDI的几个最佳实践
深入浅出图解CNN-卷积神经网络
数值 - number(Lua)
什么是敏捷测试
LeetCode 648(C#)
状态模式 - Unity(有限状态机)
【TPM2.0原理及应用指南】 12、13、14章
【TPM2.0原理及应用指南】 5、7、8章
Functions and usage of viewflipper
【网络攻防原理与技术】第3章:网络侦察技术
请将磁盘插入“U盘(H)“的情况&无法访问 磁盘结构损坏且无法读取
Solid function learning
notification是显示在手机状态栏的通知
第3章业务功能开发(实现记住账号密码)
【TPM2.0原理及应用指南】 16、17、18章
imageswitcher的功能和用法
让保险更“保险”!麒麟信安一云多芯云桌面中标中国人寿, 助力金融保险信息技术创新发展
DatePickerDialog and trimepickerdialog
With the latest Alibaba P7 technology system, mom doesn't have to worry about me looking for a job anymore
Numberpick的功能和用法

![[tpm2.0 principle and Application guide] Chapter 1-3](/img/28/7f6e848d5c12d175214d6cc5de7c8b.png)







