1、 什么是回表?什么是索引下推,什么是索引覆盖?
时间: 2023-06-01 08:03:07 浏览: 121
回表是指在查询语句中需要访问表中的数据,而不是只通过索引就能够获取到需要的数据。例如,当查询语句需要返回表中的某些列,而这些列没有被索引包含时,就需要回表。
索引下推是指在执行查询语句时,将过滤条件下推到索引层,尽可能减少回表的次数,从而提高查询效率。
索引覆盖是指查询语句只需要通过索引就能够获取到需要的数据,而不需要回表访问表中的数据。这种情况下,查询效率会更高,因为回表需要额外的I/O操作。
相关问题
什么是覆盖索引和索引下推
覆盖索引是指索引中包含了查询所需的所有字段,因此可以直接从索引中获取查询结果,而不需要再去访问数据表。这样可以减少磁盘IO和内存消耗,提高查询性能。
索引下推(Index Condition Pushdown)是一种优化技术,它在执行查询时,将部分过滤条件下推到存储引擎层进行处理。具体而言,当查询涉及到使用索引的列和非索引列的条件时,传统的方式是先使用索引进行范围查找,然后再对查找结果进行过滤。而索引下推则是将非索引列的条件直接下推到存储引擎层,在索引遍历的过程中就进行过滤,减少了不必要的数据读取和处理,提高了查询效率。
综合来说,覆盖索引和索引下推都是数据库查询优化的技术手段,能够提升查询性能和效率。
什么是覆盖索引和索引下推,用表格形式对比
好的,下面是覆盖索引和索引下推的表格形式对比:
假设有以下的表结构:
| id | name | age | gender | address |
| --- | --- | --- | --- | --- |
| 1 | Amy | 20 | Female | Beijing |
| 2 | Bob | 25 | Male | Shanghai|
| 3 | Cindy| 30 | Female | Guangzhou|
现在有以下的查询语句:
SELECT id, name, age FROM table WHERE gender='Female';
假设我们对 gender 列建立了非聚集索引,那么使用覆盖索引和索引下推的查询过程如下:
| 查询方式 | 查询过程 |
| -------- | ---------------------------------------------------------------- |
| 覆盖索引 | 在非聚集索引中查找符合条件的 id, name 和 age 列,无需回到原表中查询 |
| 索引下推 | 在非聚集索引中查找符合条件的 id,再回到原表中查询 name 和 age 列 |
下面是查询过程的具体表格形式:
1. 覆盖索引查询:
直接在非聚集索引中查找符合条件的 id, name 和 age 列,无需回到原表中查询。
| id | name | age |
| --- | --- | --- |
| 1 | Amy | 20 |
| 3 | Cindy| 30 |
2. 索引下推查询:
在非聚集索引中查找符合条件的 id,再回到原表中查询 name 和 age 列。
| id | name | age |
| --- | --- | --- |
| 1 | Amy | 20 |
| 3 | Cindy| 30 |
下面是索引下推查询的具体过程,可以看到查询过程中需要回到原表中查询 name 和 age 列。
| id | name | age | gender |
| --- | --- | --- | --- |
| 1 | Amy | 20 | Female |
| 2 | Bob | 25 | Male |
| 3 | Cindy| 30 | Female|
| gender | id |
| --- | --- |
| Female | 1 |
| Female | 3 |
阅读全文