-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Q10Viking
committed
Mar 23, 2024
1 parent
ad7eefd
commit 61351e9
Showing
2 changed files
with
54 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
--- | ||
sidebarDepth: 3 | ||
sidebar: auto | ||
prev: | ||
text: Back To 目录 | ||
link: /MySQL/ | ||
typora-root-url: ..\.vuepress\public | ||
--- | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
最左前缀原则(Leftmost Prefix Rule)是索引在数据库查询中的一种使用规则。它指的是在使用复合索引时,索引的最左边的连续几个列会被用于查询过滤条件的匹配。 | ||
|
||
具体来说,如果在表中创建了一个复合索引,包含多个列 A、B、C,那么最左前缀原则要求查询中的过滤条件必须从索引的最左边开始,并且不能跳过中间的列。只有当查询中的过滤条件与索引的最左前缀完全匹配时,索引才能被充分利用。 | ||
|
||
考虑以下复合索引 (A, B, C) 和查询语句 | ||
|
||
```sql | ||
SELECT * FROM my_table WHERE A = 'value1' AND C = 'value2'; | ||
``` | ||
|
||
在这种情况下,最左前缀原则要求查询条件中必须包含列 A,而不能直接使用列 C 进行过滤。因为只有满足最左前缀条件,索引 (A, B, C) 才能被有效地使用。 | ||
|
||
|
||
|
||
## 遵循最左前缀原则的好处包括: | ||
|
||
1. **提高查询性能:**通过使用索引的最左前缀,可以最大限度地减少索引扫描的数据量,提高查询的效率和响应时间。 | ||
2. **减少索引占用空间:**在某些情况下,使用最左前缀原则可以减少创建多个索引的需求,节省磁盘空间和索引维护的开销。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
--- | ||
sidebarDepth: 3 | ||
sidebar: auto | ||
prev: | ||
text: Back To 目录 | ||
link: /MySQL/ | ||
typora-root-url: ..\.vuepress\public | ||
--- | ||
|
||
|
||
|
||
|
||
|
||
索引下推(Index Condition Pushdown,简称ICP)是一种**数据库查询优化技术**,它利用了数据库引擎中的索引和过滤条件,将**部分过滤工作**下推到**存储引擎**层面进行处理,从而**减少不必要的数据读取和传输(减少回表的次数)**。 | ||
|
||
在传统的查询执行过程中,数据库引擎首先根据索引定位到符合过滤条件的数据行,并将这些行读取到内存中,然后再进行进一步的过滤操作。而索引下推则在这一步骤中尽可能地将过滤操作下推到存储引擎层面,避免将不符合条件的数据行读取到内存中。 | ||
|
||
通过索引下推,数据库系统可以在存储引擎层面根据索引和过滤条件提前过滤掉不符合条件的数据,减少了需要传递给查询引擎的数据量和内存消耗。这样可以大大减少磁盘 I/O 和数据传输的开销,提升查询性能和整体系统效率。 | ||
|
||
需要注意的是,索引下推并不是对所有类型的查询都适用,它更适用于复杂查询条件、多列条件的查询中,能够有效地减少不必要的数据读取和传输。 | ||
|