自学内容网 自学内容网

MYSQL 索引介绍

1、什么是索引?

        索引是一种可以快速查询的有序的数据结构。如果查询没用上索引的话,那么就会出现把表中的每一条数据进行扫描,这样效率太差。

        索引的优点就是查找速度快,并且减少进行IO请求次数,根据索引排序减少与CPU消耗。但是存储索引要空间进行存储,并且增删改的时候效率较低因为要在数据结构上修改节点。

2、索引结构

        B+树索引 大部分引擎都支持的数据结构、Hash索引,R-tree索引、Full-Text索引

        目前使用InnoDB树结构那么就主要介绍B+树结构

        1.为什么不使用二叉树呢?

        因为二叉树可能会有链化问题,比如二叉排序树,链化斜树,这样查找层树过多导致查找效率太慢,红黑树保证不会倾斜,但是数据的存储的值每个节点只能存两个,对于存储多个数据,也会导致层次太高查找性能不足。

        2.B树数据结果

   

        5阶数说明有5个子节点,有4个key 5个指针。

       3.B+树

        它的特点是所有数据都会出现在叶子节点,如果数据满的话键值会从中间向上分裂,并且叶子节点会有一根单向链表进行连接。在Mysql中优化了一个点就是多了一个指针形成双向链表在叶子节点,保持查找的顺序,提供区间访问性能。

 目前我们用的是B+树,为什么?因为如果根据B+树的话,非叶子节点存储的就是指针而不是值,因为一个取最多能存1M大小的内容,然后一个页最多存16k的内容,也就是一个区最多能存64页,我们设想如果节点上存键值指针以及数据,那么一个区能存的指针键值就少,那么我树的高度就会变高层级变大,如果是B+树,非叶子节点只存储键值和指针,那么同样空间能存储的键值就多,树的层级变小,查找效率变高。比如这个数是5阶那么可能单数据太大,B树节点可能4个数据加指针加键值就存满了。

        4.Hash结构

确定是不能范围查询、不支持排序功能,好处是块,因为存储的时候会生成一个对应的hash值,对应着该数据的位置,如果查找的时候根据键值通过hash算法就可以找到对应hash值位置的数据 Memory引擎支持该结构。


原文地址:https://blog.csdn.net/m0_64022419/article/details/143727491

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!