当前位置:网站首页>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
边栏推荐
- Qstype implementation of self drawing interface project practice (I)
- Llvm family (1) - Introduction to llvm
- Take stock of some easy-to-use and niche markdown editors
- Popular science of device review: popular science of innovative medical device series - sternum plate products
- alibaba jarslink
- Unity shader learning (II) the first shader
- Challenges of machine learning system in production
- 手把手带你入门 API 开发
- [tcapulusdb knowledge base] tcapulusdb operation and maintenance doc introduction
- 干货!零售业智能化管理会遇到哪些问题?看懂这篇文章就够了
猜你喜欢

Redis distributed lock 15 ask, what have you mastered?

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.

Detailed explanation of interprocess communication

器审科普:创新医疗器械系列科普——胸骨板产品

Unity shader learning (II) the first shader

"Internet +" contest topic hot docking | I figure to understand 38 propositions of Baidu

C/s architecture

Usage of rxjs mergemap

pull request

面试突击60:什么情况会导致 MySQL 索引失效?
随机推荐
Jwas: a Bayesian based GWAS and GS software developed by Julia
MapReduce实战小案例(自定义排序、二次排序、分组、分区)
最大路径和问题(摘樱桃问题)
Challenges of machine learning system in production
pull request
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.
Rxjs mergeMap 的使用场合
巅峰小店APP仿站开发玩法模式讲解源码分享
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
AutoCAD - three pruning methods
Comment modifier Node Fichiers dans les modules
Salesforce 容器化 ISV 场景下的软件供应链安全落地实践
Summary of qstype class usage (III)
Popular science of device review: popular science of innovative medical device series - sternum plate products
Detailed explanation of interprocess communication
优博讯出席OpenHarmony技术日,全新打造下一代安全支付终端
How to adjust an integer that is entered in Excel but always displays decimals?
建木持续集成平台v2.5.0发布
Unity Shader学习(二)第一个Shader
[tcapulusdb knowledge base] tcapulusdb doc acceptance - create business introduction