当前位置:网站首页>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
name
It'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 .
边栏推荐
- 命令模式 - Unity
- Functions and usage of viewflipper
- 专精特新软件开发类企业实力指数发布,麒麟信安荣誉登榜
- Toast will display a simple prompt message on the program interface
- Siggraph 2022 best technical paper award comes out! Chen Baoquan team of Peking University was nominated for honorary nomination
- 【重新理解通信模型】Reactor 模式在 Redis 和 Kafka 中的应用
- 无法链接远程redis服务器(解决办法百分百)
- 麒麟信安云平台全新升级!
- L1-025 正整数A+B(Lua)
- [tpm2.0 principle and Application guide] Chapter 1-3
猜你喜欢
随机推荐
【TPM2.0原理及应用指南】 9、10、11章
Functions and usage of tabhost tab
2021-06-28
Biped robot controlled by Arduino
[video / audio data processing] Shanghai daoning brings you elecard download, trial and tutorial
The computer cannot add a domain, and the Ping domain name is displayed as the public IP. What is the problem? How to solve it?
actionBar 导航栏学习
Audio Device Strategy 音频设备输出、输入 选择 基于7.0 代码
策略模式 - Unity
Functions and usage of serachview
[re understand the communication model] the application of reactor mode in redis and Kafka
基于RGB图像阈值分割并利用滑动调节阈值
Pytorch中自制数据集进行Dataset重写
如何在软件研发阶段落地安全实践
Function and usage of calendar view component
99%的人都不知道|私有化部署还永久免费的即时通讯软件!
Vscode three configuration files about C language
什么是敏捷测试
本周小贴士131:特殊成员函数和`= default`
Toast will display a simple prompt message on the program interface