• MYSQL(索引篇)


    一、什么是索引

    索引是一种数据结构,它用来帮助MYSQL更高效的获取数据

    采用索引可以提高数据检索的效率,降低IO成本

    通过索引对数据排序,降低数据排序成本,降低CPU消耗

    常见的有:B树索引、B+树索引、哈希索引。其中InnoDB引擎采用的是B+数索引

    二、索引的底层是什么 

    MYSQL默认使用InnoDB存储引擎, 在InnoDB下的索引底层采用B+树数据结构存储引擎。

    选用B+树主要有三个原因:

    • B+树对比B树更“矮胖”,阶数少,路径低,其扫描效率更高
    • B+树的读写代价低,非叶子节点只存放指针,叶子节点存放数据。mysql一页的大小是固定16kb的,对比B树的节点同时存放指针和数据,它可以存放更多的指针,一次性读取的数据量更多。
    • B+树的叶子节点通过双向链表维护,范围查找、排序查找、区间查找能力优秀

    三、B+树和B树区别 

    一、在B树中,非叶子节点和叶子节点都会存储数据,而B+树的数据只存放在叶子节点,非叶子节点只存放指针,查询效率更稳定

    二、在范围查找时效率更高,B+树的数据都在叶子节存储,叶子节点之间通过双向链表维护

    四、什么是聚集索引和非聚集索引 

    聚集索引:索引和数据放在一块,b+数的叶子节点保存了整行数据,有且只有一个,一般情况用主键作为聚集索引

    非聚集索引:索引和数据分开存储,b+数的叶子节点保存对应主键,可以有多个。一般自定义的索引都是非聚集索引

    五、什么是回表查询 

    回表的意思就是一次查询没有获得我们所需要的全部数据,可能只通过二级索引获得了主键值,需要使用该主键值回到聚集索引中重新查询到所有数据。

    为避免回表,可以采用覆盖索引或者在聚集索引列上进行查询 

     六、什么是覆盖索引

    覆盖索引:在select查询中,返回的数据在索引列上可以全部找到。比如我们通过id聚集索引进行查询,它的叶子节点上保存了整行数据,可以一次查询全部返回,查询效率高。

    而如果所需返回的数据有部分不在索引列上,就可能触发回表机制。为了避免,查询时尽量不要使用select *,尽量在返回列中都包含添加索引的字段。 

    七、怎么处理超大分页 

    超大分页一般都是在数据量比较大时,我们使用了limit分页查 询,并且需要对数据进行排序,这个时候效率就很低,我们可以采用覆盖索 引和子查询来解决先分页查询数据的id字段,确定了id之后,再用子查询来过滤,只查询这个 id列表中的数据就可以了 因为查询id的时候,走的覆盖索引,所以效率可以提升很多
     

    八、创建索引的原则 

    一般选择读的写少的字段创建索引。

    尽量选择复合索引,一条sql的返回值尽量使用覆盖索引

    较长的字段可以采用前缀索引 

  • 相关阅读:
    (2022版)一套教程搞定k8s安装到实战 | Affinity
    IQtree:使用 SNP 数据(vcf file)构建玉米群体的系统发育树
    计算机竞赛 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
    【FusionInsight 迁移】HBase从C50迁移到6.5.1(02)C50上准备FTP Server
    可编程的并行接口8255A
    主线程结束子线程不再执行
    如何创建高效的 Python Docker 镜像详解
    vue.js毕业设计,基于vue.js前后端分离订座预约小程序系统 开题报告
    sub0 里斯本精彩回顾:探索波卡区块的创新空间
    分治算法(选择问题等)
  • 原文地址:https://blog.csdn.net/weixin_48841931/article/details/134059596