为什么数据库使用B树索引而非散列索引

一般数据库使用B树索引或B+树索引而不会使用散列索引。万事万物都有原因,这也不会例外。这是在July的《编程之法》一书中看到的问题,所以在网上查了大家对该问题的看法以及自己的想法总结如下:

我想对于这个问题应该从三方面考虑:数据库的特点和常用操作、B树索引的特点和散列索引的特点。当然特点肯定就包括优点和缺点,或者叫长处和短处。

数据库的作用无非就两个:存储数据和对数据进行操作。典型的关系型数据库例如MySQL、Oracle、SQL Server、db2等和从2010年开始随着大数据云计算流行的NoSQL类数据库都是这两个作用,就像操作系统一样作用就是向下管理系统资源向上提供服务接口。数据库中一大部分是对操作的优化。而在数据库中索引则起着加快查询的作用,通过索引可以避免数据库引擎进行默认的全表扫描而是直接定位到特定记录区域,所以说索引的存在是为了快速。B树适合在磁盘等直接存储设备上组织动态查找表,文件的组织方式便是B树或B+树。他在查询和动态操作方面效率很高。但是hash表的效率更高,可是hash表第一存在散列冲突问题,这个必须解决;第二hash表的一般利用率仅为50%,这就会占用大量的存储空间而实际应用的空间却不多。B树和hash表都很灵活适用于多表查找和存储,可是当存储比例达到一定程度时hash表必须进行扩容才能维持之后的操作,而B树不用。

不过网上有人对此的见解是要更多的考虑磁盘和内存I/O之间的效率,而hash则是随机存取效率低下,不过我觉得这并不成立。B树对平衡维持和空间利用率处理不错,而且B树本身的规则保证了B树不会出现低效的情况,而hash不支持模糊查询和区域查询。B树在插入和删除时仍然保持高效率而不会随着进程的推移发生改变。


鄙人之见欢迎指点。QQ号:2327367437


参考:

http://www.cnblogs.com/xubenben/p/3474620.html

http://zhuyuehua.iteye.com/blog/1910602

你可能感兴趣的:(算法)