数据库索引的目的:提高数据查询的效率
为什么选择b树--详解:
磁盘读取流程:
1.查找柱面号
2.查找盘面号
3.查找块号
4.将查找到的内容通过系统总线传输到内存
由上述流程可知查找到对应盘块是耗费时间最多的。
同一盘块的数据可以背一次性全部读出来,所以我们应该尽量把相关信息放在同一盘块,或者至少放在同一柱面或相邻柱面上,以求在读/写信息时尽量减少磁头来回移动的次数,避免过多的查找时间Ts。
所以,在大规模数据存储方面,大量数据存储在外存磁盘中,而在外存磁盘中读取/写入块(block)中某数据时,首先需要定位到磁盘中的某块,如何有效地查找磁盘中的数据,需要一种合理高效的外存数据结构,也就是b树。
可以用作索引提高查询效率的数据结构:
1.Hash
优点:kv结构,查询单个目标,时间复杂度O(1)
缺点:
需要范围查找,<,>,group by,order by等,会导致时间复杂度退化为O(n)(PS:此时树形依旧保持O(log(n)))
InnoDB不支持哈希索引,InnoDB会根据表的使用情况自动为表生成hash索引,不能人为干预是否在InnoDB一张表中创建HASH索引,如果InnoDB注意到某些索引值被使用的特别频繁时, 它会在内存中基于Btree的索引之上再创建一个HASH索引,这样BTREE索引也具备了HASH索引的一些优点
2.二叉树