PrefaceIf you hear terms like "MySQL 5.6" and "index optimization" during an interview, you should immediately understand that this question is about "index pushdown". What is index pushdown?Index Condition Pushdown (ICP) is a new feature of MySQL 5.6. It can reduce the number of table queries and improve query efficiency. The principle of index pushdown optimizationLet's first take a brief look at the general architecture of MySQL: The MySQL service layer is responsible for SQL syntax parsing, generating execution plans, etc., and calling the storage engine layer to perform data storage and retrieval. The push-down of index push actually means that some of the tasks that are the responsibility of the upper layer (service layer) are handed over to the lower layer (engine layer) for processing. Let's take a closer look at the MySQL query without using ICP:
When using ICP, the query process is:
Specific practice of index pushdownThe theory is rather abstract, so let’s put it into practice. Use a user table tuser and create a joint index (name, age) in the table. If there is a requirement now: retrieve all users in the table whose first name is Zhang and whose age is 10 years old. Then, the SQL statement is written like this: select * from tuser where name like '张%' and age=10; If you understand the leftmost matching principle of the index, then you know that this statement can only be So what are the next steps? No ICP used Before MySQL 5.6, the storage engine finds the primary key ID (1, 4) of Let's look at the schematic diagram: It can be seen that the table needs to be returned twice, which wastes the other field age of our joint index. Using ICP After MySQL 5.6, the storage engine finds Let's look at the schematic diagram: You can see that the table was only returned once. In addition, we can also look at the execution plan and see +----+-------------+-------+------------+-------+---------------+-----------+----------+------+------+------+----------+-----------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------+-----------+----------+------+------+------+----------+-----------------------+ | 1 | SIMPLE | tuser | NULL | range | na_index | na_index | 102 | NULL | 2 | 25.00 | Using index condition | +----+-------------+-------+------------+-------+---------------+-----------+----------+------+------+------+----------+-----------------------+ Index pushdown usage conditions
The purpose of index pushdown is to reduce the number of table returns, that is, to reduce IO operations. For InnoDB's clustered index, the data and index are together, and there is no such thing as table return.
Related system parametersIndex condition pushdown is enabled by default, and you can use the system parameter optimizer_switch to control whether it is enabled. View the default status: mysql> select @@optimizer_switch\G; *************************** 1. row *************************** @@optimizer_switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on 1 row in set (0.00 sec) Toggle state: set optimizer_switch="index_condition_pushdown=off"; set optimizer_switch="index_condition_pushdown=on"; refer to: [1]. "MySQL Technical Insider: InnoDB Storage Engine" [2]. MySQL Practice 45 Lectures [3]. Simple understanding and examples of MySQL index pushdown (ICP) [4]. Understand what is MySQL Index Pushdown (ICP) in one article SummarizeThis is the end of this article about MySQL index pushdown. For more relevant MySQL index pushdown content, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: Detailed explanation of the conflict between flex layout and position:absolute/fixed
>>: Share 5 helpful CSS selectors to enrich your CSS experience
Prerequisites Compose is a tool for orchestrating...
Table of contents nextTick Mixins $forceUpdate se...
This article example shares the specific code of ...
1. Overview In the daily operation and maintenanc...
1. Function Introduction sed (Stream EDitor) is a...
Table of contents 1. Leftmost prefix principle 2....
Preface Due to the weak typing of JS, loose writi...
0. Overview Zabbix is an extremely powerful ope...
Linux file permissions First, let's check the...
1. Always close HTML tags In the source code of p...
Usage scenarios For existing servers A and B, if ...
Table of contents 1. Scope 2. Scope Chain 3. Lexi...
The MySQL query result row field splicing can be ...
Create a new project test1 on Code Cloud Enter th...
How to use if in Linux to determine whether a dir...