数据库索引实现(B+,B-,hash)
★ 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.索引定义 数据库索引好比是一本书前面的目录,能加快数据库的查询速度.索引是对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构.如果想按特定职员的姓来 ...
- mysql 节点查根_(三)B数、B+树及在数据库索引中应用
在算法逻辑上,二叉树的查找效率和比较次数都是最小的,但是在实际问题中,还要考虑磁盘IO. 数据库索引是存储在磁盘上的,当数据量比较大时,索引可能几个G. 当我们利用索引查询的时候,不能将整个索引全部加 ...
- B-树和B+树的应用:数据搜索和数据库索引
http://blog.csdn.net/hguisu/article/details/7786014 http://blog.csdn.net/xlgen157387/article/details ...
- access建立两个字段唯一索引_数据库索引原理及优化
微信公众号:云计算通俗讲义 持续输出技术干货,欢迎关注! 通过本文你将了解: 概述 分类 索引底层实现原理 基本操作 索引失效 索引优化 01 概述 索引是帮助MySQL高效获取数据的排好序的数据结构 ...
- mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...
一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...
- mysql 左连接 怎么走索引_数据库索引、左连接、右连接、等值连接
在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引(MyISAM 表)和R-Tree索引,本文讲的是B-Tree索引. 一.Mysql索引主要有两种结构 ...
- MariaDB 数据库索引详解(9)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...
- MySql数据库索引原理
写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...
- 位图索引,数据库索引浅浅的学习
摘自http://www.cnblogs.com/LBSer/p/3322630.html 位图(BitMap)索引 前段时间听同事分享,偶尔讲起Oracle数据库的位图索引,顿时大感兴趣.说来惭愧, ...
- sql管理:索引超出范围必须为非负值并小于集合大小_java面试基础知识-数据库基础知识(数据库索引部分)...
1.1数据库架构: 如何设计一个关系型数据库? 存储模块(文件系统)用块或者页作为存储单位 程序实例: 存储管理 缓存机制 不宜过大,要有淘汰机制 SQL解析 日志管理 权限划分 容灾机制 索引管理 ...
最新文章
- 只要有热情和方法就能学好Linux
- jsp页面修改成html页面
- 『重构--改善既有代码的设计』读书笔记----Move Method
- K-Means聚类算法进行压缩图片
- LINUX不能ping域名, 能ping ip, 添加DNS解析
- Stanford UFLDL教程 逻辑回归的向量化实现样例
- 深入浅出springboot 下载_有没有相见恨晚的学习模电好方法?《新概念模拟电路》全五册合集免费下载...
- java原子操作cas_java并发编程系列二:原子操作/CAS
- MongoDB最新4.2.7版本三分片集群修改IP实操演练
- MANIFEST.MF和feature.xml版本控制规则
- mysql数据库的变量有哪些_[数据库]MySQL变量
- google地图静态api使用助手(html源码)
- git 终端配置mac(udacity)
- 报表设计器——设计自己的报表
- 如何创建sis文件——概叙
- 统计字符号串“aaaabbbccccddfggh”中字母个数或统计最多字母数;
- Blender建模模块:把顶点压平的优雅姿势
- 微信小程序云开发初步上手
- cc2540 定频,设置发射功率
- MATLAB R2009a完美安装及下载