当前位置:网站首页>Interview shock 60: what will cause MySQL index invalidation?
Interview shock 60: what will cause MySQL index invalidation?
2022-06-27 12:04:00 【Wang Lei】
In order to verify MySQL Under what circumstances will the index fail , We can use explain Execute the plan to analyze the specific scenario of index failure .
explain Use as follows , Just look up the SQL Add... Before explain Key words can be used , As shown in the figure below : In the columns of the above query results , Our main observation key This column ,key This column represents the index actually used , If NULL The index is not used , Otherwise, the index is used .
All the results listed above are explained as follows :
id — Select the identifier ,id The higher the priority, the higher , The first to be executed ; select_type — Represents the type of query ; table — Output result set table ; partitions — Matching partition ; type — Indicates the connection type of the table ; possible_keys — When representing a query , Possible indexes ; key — Indicates the index actually used ; key_len — Length of index field ; ref— Comparison of columns and indexes ; rows — Approximate estimated number of lines ; filtered — Percentage of rows filtered by table criteria ; Extra — Description and description of implementation .
One of the most important is type Field ,type The value types are as follows :
all — Scan the full table data ;
index — Traverse index ;
range — Index range lookup ;
index_subquery — Use... In subqueries ref;
unique_subquery — Use... In subqueries eq_ref;
ref_or_null — Yes null To optimize the index ref;
fulltext — Use full text indexing ;
ref — Find data using a non unique index ;
eq_ref — stay join Use primary key or unique index association in query ;
const — Put a primary key in where The following is used as a conditional query , MySQL The optimizer can turn this query optimization into a constant , How and when to transform , It depends on the optimizer , This ratio eq_ref Be more efficient .
Create test tables and data
In order to demonstrate and test that situation will lead to index invalidation , Let's create a test table and corresponding data :
-- Create table
drop table if exists student;
create table student(
id int primary key auto_increment comment ' Primary key ',
sn varchar(32) comment ' Student number ',
name varchar(250) comment ' full name ',
age int comment ' Age ',
sex bit comment ' Gender ',
address varchar(250) comment ' Home address ',
key idx_address (address),
key idx_sn_name_age (sn,name,age)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Add test data
insert into student(id,sn,name,age,sex,address)
values(1,'cn001',' Zhang San ',18,1,' Gao Laozhuang '),
(2,'cn002',' Li Si ',20,0,' Huaguoshan '),
(3,'cn003',' Wang Wu ',50,1,' Waterfall cave ');There are... In total in the current table 3 An index , As shown in the figure below :
PS: The following content of this article is based on MySQL 5.7 InnoDB Data engine .
Index failure 1: Non leftmost match
The leftmost matching principle refers to , Queries that start with the leftmost field can use a union index , Otherwise, you will not be able to use the union index . The field order of our union index is sn + name + age, We assume that their order is A + B + C, The following union indexes are used as follows : As can be seen from the above results , If the matching fields start from the leftmost, the upper union index can be used , such as :
A+B+C
A+B
A+C
among :A Equals field sn,B Equals field name,C Equals field age.
and B+C But you can't use the union index , This is the left most matching principle .
Index failure 2: Error fuzzy query
Fuzzy query like The common usage of 3 Kind of :
Fuzzy match followed by any character :like ' Zhang %' Fuzzy match any preceding character :like '% Zhang ' Fuzzy matching before and after any character :like '% Zhang %'
And this 3 There are only two kinds of fuzzy queries 1 Three query methods can be used to index , The specific implementation results are as follows :
Index failure 3: Column operation
If the index column uses an operation , Then the index will fail , As shown in the figure below :
Index failure 4: Using functions
If any... Is used in the query column MySQL The provided function will invalidate the index , For example, the following columns use ifnull The execution plan after the function is as follows :
Index failure 5: Type conversion
If the index column has a type conversion , Then I won't go to the index , such as address Is a string type , When querying, you set int A value of type will invalidate the index , As shown in the figure below :
Index failure 6: Use is not null
When used in a query is not null It can also cause indexes to fail , and is null The index will be triggered normally , As shown in the figure below :
summary
Lead to MySQL Common scenarios for index invalidation are as follows 6 Kind of :
The union index does not satisfy the leftmost matching principle . The first fuzzy query is an indefinite matching character . The index column is involved in the operation . The index column uses the function . Index column has type conversion . Index columns use is not null Inquire about .
It's up to you to judge right and wrong , Disdain is to listen to people , Gain or loss is more important than number .
official account :Java Analysis of the real interview questions
Interview collection :https://gitee.com/mydb/interview
边栏推荐
- 聊聊 Go 语言与云原生技术
- R语言使用MASS包的polr函数构建有序多分类logistic回归模型、使用VGAM包的vglm函数对有序多分类logistic回归模型进行平行性假设作检验
- Master formula
- R语言dplyr包arrange函数排序dataframe数据、通过多个数据列排序dataframe数据、指定第一个字段降序排序,第二字段不指定(默认升序排序)
- 2022ciscn central China Web
- i. Construction of mx6ull C language environment
- MQTT协议栈原理及交互流程图
- Wechat applet realizes five-star evaluation
- Dynamic programming [4] (counting class DP) example: integer partition
- [tcapulusdb knowledge base] tcapulusdb doc acceptance - Introduction to creating game area
猜你喜欢
【On nacos】快速上手 Nacos
Interview shock 60: what will cause MySQL index invalidation?
The wonderful use of 0 length array in C language
How to adjust an integer that is entered in Excel but always displays decimals?
Unity Shader学习(二)第一个Shader
[tcapulusdb knowledge base] tcapulusdb doc acceptance - Introduction to creating game area
面试突击60:什么情况会导致 MySQL 索引失效?
L'utilisation de C language 0 length Array
mysql学习1:安装mysql
Wait, how do I use setmemorylimit?
随机推荐
Matlab exercises - create 50 rows and 50 columns of all zero matrix, all 1 matrix, identity matrix, diagonal matrix, and output the 135 element of the matrix.
"24 of the 29 students in the class successfully went to graduate school" rushed to the hot search! Where are the remaining five?
Jerry's DAC output mode setting [chapter]
Unity Shader学习(二)第一个Shader
JSP custom tag
如何修改 node_modules 裏的文件
想学好C语言,操作符也很重要
C語言0長度數組的妙用
Jianmu continuous integration platform v2.5.0 release
"Internet +" contest topic hot docking | I figure to understand 38 propositions of Baidu
StarCraft's Bug King ia retired for 2 years to engage in AI, and lamented that it was inferior
Wechat applet realizes five-star evaluation
R语言dplyr包arrange函数排序dataframe数据、通过多个数据列排序dataframe数据、指定第一个字段降序排序,第二字段不指定(默认升序排序)
面试突击60:什么情况会导致 MySQL 索引失效?
Thinkphp6 interface limits user access frequency
R语言fpc包的dbscan函数对数据进行密度聚类分析、plot函数可视化聚类图
[tcapulusdb knowledge base] Introduction to tmonitor system upgrade
R语言使用epiDisplay包的dotplot函数通过点图的形式可视化不同区间数据点的频率、使用by参数指定分组参数可视化不同分组的点图分布、使用dot.col参数指定分组数据点的颜色
In 2021, the global professional liability insurance revenue was about USD 44740million, and it is expected to reach USD 55980million in 2028. From 2022 to 2028, the CAGR was 3.5%
How to adjust an integer that is entered in Excel but always displays decimals?