一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就来谈谈关于软件测试中的“数据库中的index索引”。
index索引
索引的目的就是为了让查询的速度更快,索引对应着一张索引表,存储在引擎中。在mysql数据库中常见的索引有三种:B-Tree索引、哈希索引、全文索引。
(1) B-Tree索引
生活中我们通常说的索引都是指B-Tree索引。
创建索引后会生成一张索引表,这个张索引表存在系统表中,索引之所以查询可以变得更快的原理是索引表是一张已经排序好的表,查找时是使用了二分法查找的原理,来加快检索速度。
所以使用B-Tree的索引时,会根据二叉树方式来生成一张有序的索引表。
二叉树包括:根、左孩子、右孩子。左孩子比根小,右孩子比根大。并且每个叶子到根的距离是一致。
那么生成索引表的排序规则通常有以下几种:
1.匹配全名
2.最左前缀
3.匹配列前缀
4.一定范围匹配
索引也是一张表存在,当我们的数据很多时,这样会生成的索引表也会变得很大,那么当我们进行插入数据和更新数据时,这个索引就必须重新排序,而重新就可以让排序的算法花费很长时间,或者生成新的索引表将会花费很多时间。
索引表使用久之后会产生很多碎片,这叫索引碎片,所以必须定期地去维护索引表。通常维护索引的方法有:
1.删除原来的索引,重新新建索引。
2.使用相关命令重新整理。
(2)哈希索引
哈希索引的原理是将表中每个记录生成一个哈希值,这个哈希值是通过啥希函数来生成的,类似下面的内容:
f('LiLei') = 2237
f('Hmm') = 2287
哈希函数中每个哈希都一个对应的指针,指针其实是数据所在硬盘地址。
在生成哈希值时可能会产生哈希碰撞。所以希望尽量将哈希碰撞率小些,如果碰撞率过高会影响检索速度。
HASH索引的局限性:
1.HASH得到的值地址和指针,也不是记录本身的值
2.HASH键值不会进行排序
3.HASH索引只支持in、=、<=>条件的检索,例如count > 100这种是不适合的
4.不适合部分匹配,哈希是一个精确的匹配算法,并且区别分大小
5.HASH碰撞率太高,会影响HASH索引检索的速度
今天关于“数据库中的index索引”就学习到这里了,每个工作日小编都会更新一个小知识,希望大家多多关注我们,一起来学习喔!