当前位置:网站首页>Interview shock 60: what will cause MySQL index invalidation?
Interview shock 60: what will cause MySQL index invalidation?
2022-06-27 12:16:00 【JAVA Chinese community】
Keep creating , Accelerate growth ! This is my participation 「 Nuggets day new plan · 6 Yuegengwen challenge 」 Of the 12 God , Click to see the event details
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 :gitee.com/mydb/interv…
边栏推荐
- 面试突击60:什么情况会导致 MySQL 索引失效?
- 微服务拆分
- 今晚战码先锋润和赛道第2期直播丨如何参与OpenHarmony代码贡献
- Research Report on the overall scale, major manufacturers, major regions, products and application segments of hydraulic torque in the global market in 2022
- FileOutputStream
- R语言使用epiDisplay包的dotplot函数通过点图的形式可视化不同区间数据点的频率、使用by参数指定分组参数可视化不同分组的点图分布、使用dot.col参数指定分组数据点的颜色
- TiDB 6.0:让 TSO 更高效丨TiDB Book Rush
- 剑指 Offer 04. 二维数组中的查找
- pull request
- Dynamic programming [III] (interval DP) stone merging
猜你喜欢
57. The core principle of flutter - layout process
In 2021, the global enhanced oil production surfactant revenue was about USD 202.3 million, and it is expected to reach USD 297.1 million in 2028
JSP custom tag
MapReduce实战小案例(自定义排序、二次排序、分组、分区)
AutoCAD - three pruning methods
巅峰小店APP仿站开发玩法模式讲解源码分享
Research Report on the overall scale, major manufacturers, major regions, products and application segments of hydraulic torque in the global market in 2022
如何修改 node_modules 里的文件
动态规划【三】(区间dp)石子合并
Topic37——64. 最小路径和
随机推荐
Salesforce 容器化 ISV 场景下的软件供应链安全落地实践
$15.8 billion! 2021 the world's top15 most profitable hedge fund giant
Popular science of device review: popular science of innovative medical device series - sternum plate products
Jianmu continuous integration platform v2.5.0 release
Unity shader learning (I) understanding the basic structure of unity shader
ACL 2022 | 中科院提出TAMT:TAMT:通过下游任务无关掩码训练搜索可迁移的BERT子网络
Wechat applet payment password input
MapReduce principle analysis (in-depth source code)
[tcapulusdb knowledge base] tcapulusdb OMS business personnel permission introduction
如何修改 node_modules 里的文件
Go Web 编程入门:验证器
MapReduce原理剖析(深入源码)
聊聊 Go 语言与云原生技术
Llvm family (1) - Introduction to llvm
The R language uses the follow up The plot function visualizes the longitudinal follow-up map of multiple ID (case) monitoring indicators, and uses stress The labels parameter adds label information t
解开C语言的秘密《关键字》(第六期)
Youboxun attended the openharmony technology day to create a new generation of secure payment terminals
nifi从入门到实战(保姆级教程)——身份认证
Topic38——56. 合并区间
JSP自定义标签