当前位置:网站首页>Two minutes, talk about some wrong understandings of MySQL index
Two minutes, talk about some wrong understandings of MySQL index
2022-07-07 22:52:00 【Yes' level training strategy】
Hello , I am a yes.
Today, let's talk about MySQL InnoDB Some easily misunderstood points of the index .
Don't talk much , Direct departure !
You may not use the index you think you will use
In order that the story can develop smoothly , Let's start with a watch , DDL as follows :

Now I want to execute this statement SELECT * FROM yes.t1 where f3 = 11;
Which index do you think is used ?
Many students may feel that although there is idx_f2_f3 This joint index , But the query criteria are f3, No, f2, Does not conform to the leftmost matching principle , Therefore, it is obvious that only full table scanning can be performed .
Let's come. explain once , have a look :
You can see the result ,key yes idx_f2_f3 , So this query uses idx_f2_f3 This index !
Someone here may not understand , How can joint indexing be used if it does not conform to the leftmost indexing principle ?
from explain As a result , Do use the union index , But it's type yes index, therefore It's not the kind of index you think , It is equal to the full scan of the joint index to obtain the results .
It's ok if you don't understand now , Listen to the following explanation .
What exactly is using an index ?
We all know InnoDB It is based on clustering index to build data , Without creating other secondary indexes , You must and can only use cluster index to query data , Because the data is only on this index , Then you don't need this index to find data. What do you use ?
If you build other secondary indexes , Then you may not need cluster index to find data , Instead, only the upper secondary index can directly get the desired data ( This is the example of the above query ).
in summary , you are here InnoDB Find any data , Can only use index .
Then why do some people say that they don't follow the index on weekdays , After walking, the whole table is scanned ?
We all know the default InnoDB The index structure of is B+ Trees , This tree has a feature , Its leaf nodes are connected by linked lists .
So as long as we find primary key The leftmost leaf node , Then traverse the scan in right order , You can get all the records of this form , This scanning method is called full table scanning .

Tips: : I don't know MySQL Is the location of the leftmost leaf node recorded or the leftmost leaf node found according to the root node , Anyway, it means that , It does not affect our understanding of full table scanning .
Then what is index ?

Look at the red query route , It can use the fast search ability of the tree to locate the page where the data is located , Such a query can count as an index .
Then push back from the primary key index to the secondary index , It's the same thing . It can use the characteristics of secondary index tree to find data , Is to use the index .
But if you can't use the fast search of the secondary index tree , Is there such a thing as full table scanning , The operation of directly scanning all leaf nodes of the secondary index ?
yes , we have , This is our example above , I'll move down the screenshot of the execution result :

This query MySQL Full scan secondary index idx_f2_f3 To directly return the required data .
The reason is that the secondary index already contains all the data required by the query :f1、f2、f3, So you can scan the secondary index directly .
You can see explain Of type=index, That is, full scan secondary index .
This is also called using the index .
At this time, we use f2 As a query condition , This conforms to the leftmost matching principle , Let's see explain What's the difference? :

You can see that it is still used idx_f2_f3 , It's just type become ref , This ref It shows that you can quickly query the results when matching with constants .
This is also called using the index .
Okay , Let's sum up what it means to use an index :
- Use the primary key index to quickly find
- Fast search with secondary index
- Full scan the secondary index to find
The above three kinds are what we usually call using indexes , Then the full scan of the primary key index is what we call the full table scan ( Equivalent to not using an index , But we know that it actually uses the primary key index, right ?).
thus , I think you should already know , What exactly is using an index .
Little doubt
About MySQL Some understanding of the index is over , But look at the above example , Some students may be a little confused :
Since they all need full scanning , Why scan the secondary index , Instead of the primary key index ?
Because the primary key index stores all the data , Including transactions related to data rows ID、 Rollback pointer, etc .
The secondary index does not contain these , It only has primary key value and index column value .
Therefore, the overhead of directly reading the secondary index will be smaller , therefore When the index can overwrite the return value , Generally, the secondary index will be selected to find .
For example, I add a field to the table above :f4.

Now let's execute SELECT * FROM yes.t1 where f3 = 11;:

You can see , At this time, the secondary index is not used , Instead, the whole table is scanned directly .
The reason is that the secondary index cannot overwrite the return value , Because there are more f4 Field of .
If used idx_f2_f3 This index , Want to get f4 Value , You also need to find the primary key in the primary key index , Then we can get f4 Value , In this way, the efficiency of returning the table is low .
Of course, the result is not certain , Sometimes it is possible MySQL The statistics are wrong , Wrong index . because MySQL The execution plan is selected based on cost , Yes I/O Cost and CPU cost , Use whichever index has a low cost .
therefore , In the next article, I will analyze how the cost is calculated !
Last
I believe you have fully understood what is the use of the index ?
Okay , That's all for today's article , Wait for my next article MySQL Cost analysis !
You can click on the business card below , Pay attention to me ~
I am a yes, From a little to a billion, I'll see you next .
边栏推荐
- OpenGL job coordinate system
- Debezium系列之: 支持在 KILL 命令中使用变量
- De la famille debezium: SET ROLE statements supportant mysql8
- Typeorm automatically generates entity classes
- Welcome to CSDN markdown editor
- Revit secondary development - Hide occlusion elements
- Debezium series: MySQL tombstone event
- Px4 autonomous flight
- Kaggle-Titanic
- 行测-图形推理-7-相异图形类
猜你喜欢

Line test - graphic reasoning - 4 - alphabetic class
Redis官方ORM框架比RedisTemplate更优雅

Remember aximp once Use of exe tool
苹果在iOS 16中通过'虚拟卡'安全功能进一步进军金融领域
![[environment] pycharm sets the tool to convert QRC into py file](/img/4f/d1c811dea23e3695a8b6d04b938bb5.jpg)
[environment] pycharm sets the tool to convert QRC into py file

LeetCode707. Design linked list

如何选择合适的自动化测试工具?

行测-图形推理-9-线条问题类

Gazebo import the mapping model created by blender

Firefox browser installation impression notes clipping
随机推荐
Redis集群安装
Matplotlib quick start
Yarn cannot view the historical task log of yarn after enabling ACL user authentication. Solution
0-5VAC转4-20mA交流电流隔离变送器/转换模块
This experimental syntax requires enabling the parser plugin: ‘optionalChaining‘
IP network active evaluation system -- x-vision
Early childhood education industry of "screwing bar": trillion market, difficult to be a giant
The free styling service of Dyson's official direct store is now open for appointment. Pioneer Technology interprets the styling concept of hair care and helps consumers unlock diversified and shiny s
Revit secondary development - Hide occlusion elements
Revit secondary development - operation family documents
Cannot find module 'xxx' or its corresponding type declaration
如何选择合适的自动化测试工具?
VTOL in Px4_ att_ Control source code analysis [supplement]
Debezium系列之:源码阅读之SnapshotReader
LeetCode144. Preorder traversal of binary tree
Robot autonomous exploration series papers environment code
Redis cluster installation
Line test - graphic reasoning - 4 - alphabetic class
Get the exact offset of the element
行测-图形推理-8-图群类