MySQL数据库-索引概念及其数据结构、覆盖索引与回表查询关联、超大分页解决思路

索引是帮助mysql高效获取数据的数据结构,主要用来提高检索的效率,降低数据库的IO成本(输入输出成本(Input-Output Cost)),同时通过索引对数据进行排序也能降低数据排序的成本,降低了CPU的消耗。

Mysql的默认存储引擎InnoDB,InnoDB采用的B+树的数据结构来存储索引。B+树所有数据都出现在叶子节点,而相比较而言B树非叶子节点和叶子节点都存放数据,因此B+树内部节点相对B树更小,树的高度更小,查询速度更快。并且B+树使用双向链表串联所有叶子节点,这是B树没有的,便于扫库和区间范围查询。

建立索引的时候要避免回表查询。说道回表查询,要引入两个概念聚簇索引和非聚簇索引。聚簇索引主要指数据和索引放到了一块,B+树的叶子节点保存了整行数据,有且只有一个(一般情况下主键作为聚簇索引)。而非聚簇索引数据和索引是分开存储的,B+树叶子节点保存对应的主键,可以由多个(一般我们定义的普通索引都是非聚簇索引)。而回表的意思就是通过二级索引找到对应的主键值,然后再通过主键值找到聚集索引中所对应的整行数据。这个过程就是回表。

在select查询语句中应避免select*,避免回表查询。覆盖索引可以减少回表查询的发生,提高查询效率。所谓的覆盖索引,就是指select查询语句中使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返回数据性能高。如果按照二级索引查询数据的时候,返回的列中没有创建索引,可能会触发回表查询。举例说明:

select * from user where id =1  为覆盖索引,id查询,直接走聚集索引查询,一次查询就能查到结果

select id,name from user where name =“张三”  也为覆盖索引,虽然按照辅助索引查询数据,但在辅助索引可直接通过name直接查到name和id,不需回表查询聚集索引

select name,gender from user where name =“张三” 这个为非覆盖索引,主要因为gender需要通过name查询到id,在用id去查gender,也就是需要回表查询,所以查询语句避免使用select *,查询字段太多大概率会回表查询

对于超大分页来说可以通过覆盖索引加子查询来进行优化,举例来说

select * from user limit 100000,10就属于超大分页问题,该分页执行过程中需先排序100010记录,但仅仅返回后10条数据,其他数据丢弃,排序代价大,使用覆盖索引加子查询形式进行优化

select * from user u,(select id from user order by id limit 100000,10)a where u.id

=a.id

先分页查询数据的id字段,确定id之后,再用子查询来过滤,只查询这个id列表中的数据就可以了,因为id查询的时候,走覆盖索引,效率会提升很多.

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-14 08:44:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-14 08:44:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-14 08:44:01       82 阅读
  4. Python语言-面向对象

    2024-02-14 08:44:01       91 阅读

热门阅读

  1. 企业级DevOps实战

    2024-02-14 08:44:01       41 阅读
  2. 2024.2.7

    2024.2.7

    2024-02-14 08:44:01      48 阅读
  3. 掘根宝典之C++运算符重载

    2024-02-14 08:44:01       53 阅读
  4. 力扣:53. 最大子数组和

    2024-02-14 08:44:01       45 阅读
  5. 小马识途营销顾问分析营销故事五则

    2024-02-14 08:44:01       54 阅读
  6. 课程大纲:图像处理中的矩阵计算

    2024-02-14 08:44:01       52 阅读
  7. 数据库的使用方法

    2024-02-14 08:44:01       53 阅读
  8. 类和对象——封装

    2024-02-14 08:44:01       50 阅读
  9. 制作韦恩图常用软件或网站

    2024-02-14 08:44:01       98 阅读
  10. 二级 C 语言笔试-12

    2024-02-14 08:44:01       35 阅读