当前位置:网站首页>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
边栏推荐
- Summary of qstype class usage (II)
- Jianmu continuous integration platform v2.5.0 release
- Write it down once Net analysis of a property management background service stuck
- 千万不要错过,新媒体运营15个宝藏公众号分享
- 2022CISCN华中 Web
- 优博讯出席OpenHarmony技术日,全新打造下一代安全支付终端
- Wechat applet payment password input
- 最大路径和问题(摘樱桃问题)
- R语言使用epiDisplay包的poisgof函数对泊松回归(Poisson Regression)执行拟合优度检验、检验是否存在过度离散问题(overdispersion)
- How to modify a node_ Files in modules
猜你喜欢

MapReduce原理剖析(深入源码)

pull request
![[tcapulusdb knowledge base] tcapulusdb doc acceptance - table creation approval introduction](/img/da/449a1e215885597a67344e2a6edf0f.png)
[tcapulusdb knowledge base] tcapulusdb doc acceptance - table creation approval introduction

57. The core principle of flutter - layout process

alibaba jarslink

Nifi from introduction to practice (nanny level tutorial) - identity authentication

Research Report on the overall scale, major producers, major regions, products and application segments of swine vaccine in the global market in 2022

巅峰小店APP仿站开发玩法模式讲解源码分享

AutoCAD - three pruning methods

Interviewer: with the for loop, why do you need foreach?
随机推荐
动态规划【四】(计数类dp)例题:整数划分
Online bidding of Oracle project management system
记一次 .NET 某物管后台服务 卡死分析
聊聊 Go 语言与云原生技术
Redis distributed lock 15 ask, what have you mastered?
The wonderful use of 0 length array in C language
Four memory areas (stack, heap, global, code area)
C # WPF realizes undo redo function
2022CISCN华中 Web
MQTT协议栈原理及交互流程图
[tcapulusdb knowledge base] Introduction to tmonitor system upgrade
干货!零售业智能化管理会遇到哪些问题?看懂这篇文章就够了
盘点一些好用且小众的 Markdown 编辑器
R语言glm函数构建二分类logistic回归模型(family参数为binomial)、使用AIC函数比较两个模型的AIC值的差异(简单模型和复杂模型)
Drive to APasS!使用明道云管理F1赛事
Don't miss it. New media operates 15 treasure official account to share
QStyle类用法总结(二)
Precautions for use of IO interface interrupt of Jerry [chapter]
想学好C语言,操作符也很重要
Excel中输入整数却总是显示小数,如何调整?