【面试八股文 - 数据库 - MySQL - 索引】

系列文章目录

【面试八股文 - java基础 - 数据结构 - HashMap】


前言

索引是干嘛用的,感觉还挺好理解的吧,
就类似书的目录啊,不是也叫索引么,
就是为了快速在一堆数据里面查找到我想要的那个数据用的东西。


一、 Hash索引

哈希的概念之前在hashMap中已经讲过
【面试八股文 - java基础 - 数据结构 - HashMap】
那么Hash索引就是通过hash值来索引到具体的数据内容,
优点的话,
因为hash值可以直接算出来,查找插入都很快,
缺点就也比较严重,
因为hash值其实是不具有连续性的,
所以根本没办法进行范围查找


二、B+树

1、为什么是树

而数据库的实际使用中还是经常会出现范围查找情况的,
而且也非常需要数据的顺序结构的,
所以这个时候就要用到查找和插入都有不错性能的树结构了,

2、为什么不是二叉树

树结构最经典的应该说二叉树,或者更进一步,二叉平衡树了,
那么为什么没有选用呢,
因为考虑到了磁盘I/O的影响,
索引的每次读取都需要读取磁盘数据,是比较耗时的操作,
而二叉树相对较深,需要多次的数据读取,造成查询时间的增加,
反而不如多叉树,同为树状结构,兼顾了查找和插入效率,
又减少了磁盘I/O次数,节省了查询时间

3、为什么不是b树而是b+树

前面已经提过数据库的实际使用中还是经常会出现范围查找情况的,
b数将数据储存到了所有节点中,
输出连续数据难度较大,
而b+树因为将数据完全储存在了叶子节点中,
连续数据只需要沿着叶子节点一直读取即可。


三、聚簇索引

传统艺能之“望文生义”,
聚簇索引,就是聚成一簇啊,那是谁跟谁聚成一簇呢,
是每个索引跟自己对应的数据聚成一簇,
那么就可以明白了,聚簇索引数据的索引跟数据储存位置的关系,
聚簇索引的好处显而易见,
只要根据索引规则查到了索引,那紧跟着就能读就是自己想要的数据,
查询效率较高。

那么对应聚簇索引自然就有非聚簇索引,
myISAM引擎用的就是非聚簇索引,
也就是索引会单独储存,数据和索引会分开储存 ,
根据索引规则查到索引后,会得到数据储存的地址,再根据地址查找到实际数据,
非聚簇索引将数据和索引分开的方式可以有效的防止不规则数据导致的频繁分页情况。


四、索引失效

1)索引有一个基础原则叫最左匹配原则,
如果索引可以从左到右依次提供出来,
则索引都可以使用,
但如果左面内容模糊,右面提供什么信息也无法使索引生效,
2)那么同样的也就可以理解了,如果是联合索引,
那么从左到右提供第一索引,第二索引,是没有问题的,
但如果无法提供第一索引,则同样会导致索引失效,
3)索引就简单的使用要查找的内容,
如果使用表达式,则会导致索引失效,
4)同样的,如果使用函数,也会导致索引失效,
5)格式字符集要保持一致,索引是不会转换的,不一致也会导致索引失效,
6)系统后台算法得出不用索引效率更高时,会不通过索引。


五、其他注意事项

1)按需使用索引,索引是能提高查找效率,
但索引的创建和维护也是需要一定的代价,
那么查找较少或数据量较小情况下是可以选择不使用索引的,
2)innoDB主键就是索引,如果没有主键,系统后台会创建默认索引


总结

感觉数据库索引内容很多啊,这里先留个坑位,后面想到什么内容再回来补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破晓星芒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值