★ 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表项中。

最新文章

  1. Angular2入门系列教程4-服务
  2. Oracle EBS - Profile Setting
  3. [20141121]无法通过powershell读取sql server性能计数器问题
  4. textFiled的placeHolder字体颜色
  5. IM即时通讯实现原理
  6. Redis word bak
  7. quick-cocos2d-x学习笔记—定时器
  8. 2016030401 - java性能优化建议
  9. 【矩阵乘法经典应用】【ZOJ3497】【Mistwa】
  10. 一个简单的Spring AOP例子
  11. 新鲜出炉的Using Qt 3D to visualize music
  12. [每日一题] OCP1z0-047 :2013-07-26 alter table set unused之后各种情况处理
  13. lintcode.68 二叉树后序遍历
  14. POST请求的提交
  15. 几个常用的vscode插件
  16. Python3 字典 items() 方法
  17. SQL Server-常用分页语句
  18. leetCode53. 最大子序和
  19. nginx实现MySQL负载均衡
  20. 前端之css操作2

热门文章

  1. Jquery 组 tbale表格筛选
  2. “一战通offer”互联网实习季编程挑战
  3. datatime
  4. 使用highlightjs自定义markdown代码高亮
  5. flask 即插视图(Pluggable Views)和endpoint
  6. Delphi 2010 3513正式版破解
  7. linux-shell系列8 netstat用法
  8. Codeforces ECR47F Dominant Indices(线段树合并)
  9. 自定义缓存设计(static缓存数据)
  10. MT【3】只有零向量旋转不变