当前位置:网站首页>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 .
边栏推荐
- Get the exact offset of the element
- VTOL in Px4_ att_ Control source code analysis [supplement]
- Force deduction - question 561 - array splitting I - step by step parsing
- Take full control! Create a "leading cockpit" for smart city construction
- Understand the autograd package in pytorch
- Debezium series: support the use of variables in the Kill Command
- Signal feature extraction +lstm to realize gear reducer fault diagnosis -matlab code
- Line test - graphic reasoning - 4 - alphabetic class
- Leetcode206. Reverse linked list
- Amesim2016 and matlab2017b joint simulation environment construction
猜你喜欢
行測-圖形推理-4-字母類
Select sort (illustration +c code)
PHP method of obtaining image information
How to choose the appropriate automated testing tools?
Redis cluster installation
Loki, the "open source star picking program", realizes the efficient management of harbor logs
Blender exchange group, welcome to the water group ~
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xf9 in position 56: illegal multibyte sequence
Two methods of calling WCF service by C #
Visual design form QT designer design gui single form program
随机推荐
Two methods of calling WCF service by C #
php 获取图片信息的方法
C development - interprocess communication - named pipeline
How to choose the appropriate automated testing tools?
Aspose. Word operation word document (I)
详解全志V853上的ARM A7和RISC-V E907之间的通信方式
全面掌控!打造智慧城市建设的“领导驾驶舱”
Basic knowledge of binary tree
筑起云端 “免疫”屏障,让你的数据有备无患
Select sort (illustration +c code)
PCL .vtk文件与.pcd的相互转换
Revit secondary development - operation family documents
7-51 combination of two ordered linked list sequences
0-5vac to 4-20mA AC current isolated transmitter / conversion module
Revit secondary development - get the thickness / length / height of the beam
Line test - graphic reasoning -5- one stroke class
Details of the open source framework of microservice architecture
Remember an experience of using selectmany
行测-图形推理-7-相异图形类
Yarn开启ACL用户认证之后无法查看Yarn历史任务日志解决办法