• 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的返回值尽量使用覆盖索引

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

  • 相关阅读:
    Lua博客网站支持搜索、评论、登录注册
    LeetCode-190. 颠倒二进制位(java)
    JS有哪些基本数据类型,它们的区别?
    基于SSH开发家庭收支管理系统 课程设计 大作业 毕业设计
    【C++】C++内存管理方式,malloc/free和new/delete的这些问题你都知道吗?&& 内存管理的常见面试题
    数据库系统及应用复习——第一章绪论
    从源码里的一个注释,我追溯到了12年前,有点意思。
    【网络层】IP因特网协议解析
    【Python百日进阶-数据分析】Day325 - plotly.express.scatter_3d():3D散点图
    常见的网络设备
  • 原文地址:https://blog.csdn.net/weixin_48841931/article/details/134059596