当前位置:网站首页>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
边栏推荐
- MapReduce principle analysis (in-depth source code)
- Detailed explanation of interprocess communication
- 动态规划【四】(计数类dp)例题:整数划分
- Unity Shader学习(二)第一个Shader
- R language uses GLM function to build Poisson logarithm linear regression model, processes three-dimensional contingency table data to build saturation model, uses step function to realize stepwise re
- Online bidding of Oracle project management system
- Open source model library of flying propeller industry: accelerating the development and application of enterprise AI tasks
- QStyle实现自绘界面项目实战(一)
- alibaba jarslink
- MQTT协议栈原理及交互流程图
猜你喜欢

How to adjust an integer that is entered in Excel but always displays decimals?

2022ciscn central China Web

Salesforce 容器化 ISV 场景下的软件供应链安全落地实践

想学好C语言,操作符也很重要

"24 of the 29 students in the class successfully went to graduate school" rushed to the hot search! Where are the remaining five?

2022CISCN华中 Web

进程间通信详解
![[tcapulusdb knowledge base] Introduction to tcapulusdb general documents](/img/04/b1194ca3340b23a4fb2091d1b2a44d.png)
[tcapulusdb knowledge base] Introduction to tcapulusdb general documents

数学知识——博弈论(巴什博奕、尼姆博奕、威佐夫博奕)思路及例题

Unity shader learning (I) understanding the basic structure of unity shader
随机推荐
Interview shock 60: what will cause MySQL index invalidation?
Talk about go language and cloud native technology
Getting started with go web programming: validators
Redis distributed lock 15 ask, what have you mastered?
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语言,操作符也很重要
R language dplyr package arrange function sorts dataframe data, sorts dataframe data through multiple data columns, specifies the first field to be sorted in descending order, and does not specify the
Jerry's serial port communication serial port receiving IO needs to set digital function [chapter]
Dynamic programming [4] (counting class DP) example: integer partition
[tcapulusdb knowledge base] tcapulusdb doc acceptance - transaction execution introduction
Jerry's constant feeding of dogs will cause frequent switch interruptions leading to timer [chapter]
2022ciscn central China Web
R语言dplyr包arrange函数排序dataframe数据、通过多个数据列排序dataframe数据、指定第一个字段降序排序,第二字段不指定(默认升序排序)
千万不要错过,新媒体运营15个宝藏公众号分享
R语言使用epiDisplay包的dotplot函数通过点图的形式可视化不同区间数据点的频率、使用by参数指定分组参数可视化不同分组的点图分布、使用dot.col参数指定分组数据点的颜色
R语言使用epiDisplay包的followup.plot函数可视化多个ID(病例)监测指标的纵向随访图、使用stress.labels参数在可视化图像中为强调线添加标签信息
Jianmu continuous integration platform v2.5.0 release
Unity Shader学习(一)认识unity shader基本结构
旭日3SDB,安装原版ros
Jwas: a Bayesian based GWAS and GS software developed by Julia