数据库索引

索引是帮助MySQL高效获取数据的排好序的数据结构

二叉树 --- 链表二叉树 与直接查询效果差不多

红黑树 --- 一种特殊的二叉树(二叉平衡树) --树散列不好,层次太多(高度等于查询次数)

B树 ---  没有冗余索引,每个索引下都自己的数据,叶子节点的指针为空

B+树 --- 1) 非叶子节点不存储data,只存储冗余索引(重复),可以放跟多的索引(索引(bigint = 8b) +

                指针 = 6b) 一个pigesize为16kb  所以一页可放1170个索引

             2) 叶子节点包含所有索引字段 (高度为3的B+树,可以放两千多万的数据)

             3) 叶子节点用指针连接,提高区间访问的性能

当查询索引30时,应为冗余索引是由小到大的顺序结构,在内存(RAM)中折半查询到30所在的位置,查询高度次数后,高度次数IO后,查询到

MySQL 存储引擎都是级别的

MyISAM索引文件与数据文件是分离的(非聚集) : .frm 表结构  .MYD 表数据  .MYI 索引

                                                                              回表:非聚集索引:查到索引后到数据表中查询数据

innoDB存储引擎(聚集(聚簇)索引) : 聚集索引-叶子节点包含了完整的数据记录

                                                        .frm 表结构 .ibd 表数据 + 索引

                                                         主键索引:

                                                        二级索引:

为什么建议innoDB表必须建主键,并且推荐使用整型的自增主键(不用UUID)?

因为如果不使用主键,mySQL底层会自动维护一个主键,并使用自己维护的主键来构建B+树,而数据库的资源是珍贵的, 使用要自己建立一个主键,而uuid在比较时候,会增大运行速度,

Hash索引(数组 +链表 ):很多时候Hash索引要比B+ 树索引更高效,但是由于hash冲突问题(hash碰撞 : 2个数据进行一个hash计算得出一个相等的值.会在链表的后面加元素与地址值,产生hash碰撞后,会遍历链表,查询效率慢),最重要的是hash索引不能范围查询.

B+树:范围查找 : 因为在B+树中,每一层都是由小到大顺序排序的, 并且每一顺序组叶子节点集之间,都会存在一个指针.主键自增为了避免B+树多次分裂,如果多次分裂,效率必定不高

联合索引::

最左前缀原则:创建了一个索引后,必须顺序使用属性,不能跳着使用或者不使用最左端的属性,之间使用其他属性.

 name属性是排序的,当跳过name时,age属性不是顺序排序的,只能进行全盘扫描,就没有使用索引.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值