★ B-Tree索引:每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历。B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同,很适合查找范围数据。

★ B+树索引:并不能找到一个给定健值的具体行,B+树索引只能找到被查找数据行所在的页,然后从数据库将页读入内存,在内存中查找。B+树索引可以分为聚集索引和非聚集索引。聚簇索引是按照数据存放的逻辑地址为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

○ 聚集索引 :聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序。 聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。

InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

○ 非聚集索引

非聚集索引仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。主键索引中,叶节点的data域存放的是数据记录的地址,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。(MYISAM采用此种索引方式)。

区别

聚集索引表里数据物理存储顺序和主键索引的顺序一致,所以如果新增数据是离散的,会导致数据块趋于离散,而不是趋于顺序。而非聚集索引表数据写入的顺序是按写入时间顺序存储的。聚簇索引索引的叶节点就是数据节点;而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。
适用情景

★ Hash索引:哈希索引基于哈希表实现,只有精确索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希存储在索引中,同时在哈希表中保存指向每个数据的指针。

哈希索引中存储的是:哈希值+数据行指针 
MySQL中,只有Memory存储引擎显示支持hash索引,是Memory表的默认索引类型,尽管Memory表也可以使用B-Tree索引。Memory存储引擎支持非唯一hash索引,也用链表解决hash冲突。这在数据库领域是罕见的,如果多个值有相同的hash code,索引把它们的行指针用链表保存到同一个hash表项中。

转载于:https://www.cnblogs.com/twoheads/p/9712561.html

数据库索引实现(B+,B-,hash)相关推荐

  1. 数据库索引类型及实现方式

    1.索引定义 数据库索引好比是一本书前面的目录,能加快数据库的查询速度.索引是对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构.如果想按特定职员的姓来 ...

  2. mysql 节点查根_(三)B数、B+树及在数据库索引中应用

    在算法逻辑上,二叉树的查找效率和比较次数都是最小的,但是在实际问题中,还要考虑磁盘IO. 数据库索引是存储在磁盘上的,当数据量比较大时,索引可能几个G. 当我们利用索引查询的时候,不能将整个索引全部加 ...

  3. B-树和B+树的应用:数据搜索和数据库索引

    http://blog.csdn.net/hguisu/article/details/7786014 http://blog.csdn.net/xlgen157387/article/details ...

  4. access建立两个字段唯一索引_数据库索引原理及优化

    微信公众号:云计算通俗讲义 持续输出技术干货,欢迎关注! 通过本文你将了解: 概述 分类 索引底层实现原理 基本操作 索引失效 索引优化 01 概述 索引是帮助MySQL高效获取数据的排好序的数据结构 ...

  5. mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  6. mysql 左连接 怎么走索引_数据库索引、左连接、右连接、等值连接

    在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引(MyISAM 表)和R-Tree索引,本文讲的是B-Tree索引. 一.Mysql索引主要有两种结构 ...

  7. MariaDB 数据库索引详解(9)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  8. MySql数据库索引原理

    写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...

  9. 位图索引,数据库索引浅浅的学习

    摘自http://www.cnblogs.com/LBSer/p/3322630.html 位图(BitMap)索引 前段时间听同事分享,偶尔讲起Oracle数据库的位图索引,顿时大感兴趣.说来惭愧, ...

  10. sql管理:索引超出范围必须为非负值并小于集合大小_java面试基础知识-数据库基础知识(数据库索引部分)...

    1.1数据库架构: 如何设计一个关系型数据库? 存储模块(文件系统)用块或者页作为存储单位 程序实例: 存储管理 缓存机制 不宜过大,要有淘汰机制 SQL解析 日志管理 权限划分 容灾机制 索引管理 ...

最新文章

  1. 只要有热情和方法就能学好Linux
  2. jsp页面修改成html页面
  3. 『重构--改善既有代码的设计』读书笔记----Move Method
  4. K-Means聚类算法进行压缩图片
  5. LINUX不能ping域名, 能ping ip, 添加DNS解析
  6. Stanford UFLDL教程 逻辑回归的向量化实现样例
  7. 深入浅出springboot 下载_有没有相见恨晚的学习模电好方法?《新概念模拟电路》全五册合集免费下载...
  8. java原子操作cas_java并发编程系列二:原子操作/CAS
  9. MongoDB最新4.2.7版本三分片集群修改IP实操演练
  10. MANIFEST.MF和feature.xml版本控制规则
  11. mysql数据库的变量有哪些_[数据库]MySQL变量
  12. google地图静态api使用助手(html源码)
  13. git 终端配置mac(udacity)
  14. 报表设计器——设计自己的报表
  15. 如何创建sis文件——概叙
  16. 统计字符号串“aaaabbbccccddfggh”中字母个数或统计最多字母数;
  17. Blender建模模块:把顶点压平的优雅姿势
  18. 微信小程序云开发初步上手
  19. cc2540 定频,设置发射功率
  20. MATLAB R2009a完美安装及下载

热门文章

  1. 【Hoxton.SR1版本】Spring Cloud Stream消息驱动
  2. Mybatis复杂参数传参取参方式总结
  3. Java中的DES加密与解密工具类
  4. 2、pip2.7安装Ansible
  5. 技术升级成为Linux运维人前途的魔障,是跟进还是选择被淘汰?
  6. 使用Spring Cloud Security OAuth2搭建授权服务
  7. cisco路由器IOS灾难恢复
  8. Windows服务编写原理及探讨(三)
  9. 机器学习:使用梯度下降实现逻辑回归求解多元分类问题的原理
  10. BZOJ3707 圈地