数据库索引(BTree索引和Hash索引)
索引
索引是为了方便查找我们所需要的数据。
mysql支持的索引数据类型
B-Tree索引的特点
B-Tree索引以B+Tree(树)的结构存储数据。
B-Tree索引能够加快数据的查询速度;
B-Tree更适合进行范围查找;
在什么情况下可以用到B树索引
全值匹配的查询;如:order_sn=’987654321’;
匹配最左前缀的查询;
匹配列前缀查询 ;
匹配范围值得查询;
精确匹配左前列并范围匹配另外一列;
只访问索引的查询;
BTree索引的使用限制
如果不是按照索引的最左列开始查找,则无法使用索引。
使用索引时不能跳过索引中的列;
Not in 和<>操作无法使用索引;
如果查询中有某个列的范围查询,则其右边所有的列都无法使用索引;
Hash索引的特点
Hash索引时基于Hash表实现的,只有查询条件精确匹配Hash索引中的所有列时,才能够使用到Hash索引。
对于Hash索引中的所有列,存储引擎都会为每一行计算一个Hash码,Hash索引中存储的就是Hash码。
Hash索引的限制
Hash索引必须进行二次查找
Hash索引无法用于排序
Hash索引不支持部分索引查找也不支持范围查找
Hash索引中Hash码的计算可能存在Hash冲突
为什么要使用索引
索引大大减少了存储引擎需要扫描的数据量
索引可以帮助我们进行排序避免使用临时表
索引可以把随机I/O变为顺序I/O
索引是不是越多越好
索引会增加写操作成本
太多的索引会增加查询优化器的选择时间
数据库索引(BTree索引和Hash索引)的更多相关文章
- B-Tree目录和Hash索引的区别
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T ...
- ( 转 ) 数据库BTree索引、Hash索引、Bitmap位图索引的优缺点
测试于:MySQL 5.5.25 当前测试的版本是Mysql 5.5.25只有BTree和Hash两种索引类型,默认为BTree.Oracle或其他类型数据库中会有Bitmap索引(位图索引),这里作 ...
- Hash索引和BTREE索引2
索引是数据库中用来提高性能的最常用工具.所有MySql列类型都可以被索引.索引用于快速找出在某个列中有一特定值的行.如果不使用索引,MYSQL必须从第一条记录开始然后读完整个表直到找出相关的行.常用的 ...
- BTREE索引和HASH索引的区别
从本质上理解,BTREE是一种有序树,而hash是无序的.所以最关键的区别在于: 1,BTREE可以用来做范围查询,比如大于,小于,而HASH索引仅在"=","IN&qu ...
- 图解MySQL索引--B-Tree(B+Tree)
看了很多关于索引的博客,讲的大同小异.但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等 ...
- mysql索引之一:索引基础(B-Tree索引、哈希索引、聚簇索引、全文(Full-text)索引区别)(唯一索引、最左前缀索引、前缀索引、多列索引)
没有索引时mysql是如何查询到数据的 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储10 ...
- 警惕 InnoDB 和 MyISAM 创建 Hash 索引陷阱
MySql 最经常使用存储引擎 InnoDB 和 MyISAM 都不支持 Hash 索引,它们默认的索引都是 B-Tree.可是假设你在创建索引的时候定义其类型为 Hash,MySql 并不会报错,并 ...
- 索引有B+索引和hash索引,各自的区别
Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B+树索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,那为什么大家不都用Hash索引而还要使用B+树索引呢? ...
- Mysql 索引原理《一》索引原理与慢查询1
为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然 ...
随机推荐
- TP、FP、FN、TN的含义
true positive(被正确分类的正例) false negative(本来是正例,错分为负例) true negative(被正确分类的负例) false positive(本来是负例,被错分 ...
- shiro 安全框架 详解
---恢复内容开始--- Shiro 简介 简介• Apache Shiro 是 Java 的一个安全(权限)框架.• Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境, ...
- JAVA学习笔记--初探hash与map
先推荐一篇文章 http://blog.csdn.net/cownew/article/details/6478993 也为自己mark
- JAVA代码覆盖率采集与分析方案
原文地址-> http://m.blog.csdn.net/article/details?id=48688763
- UIStakView的添加与移除
subView和arrangedSubView对于Stack View的子控件添加和移除,我们是这样描述的. 添加-->(Stack View管理的subview) addArrangedSub ...
- [CSP-S模拟测试]:Emotional Flutter(贪心)
题目传送门(内部题51) 输入格式 第一行一个整数$t$表示数据组数.每组数据的第一行有三个整数$s,k,n$.第二行有$n$个整数$A_1,A_2,...,A_n$,依次表示黑白条的长度. 输出格式 ...
- JAVA中STL使用
Vector:和c++的vector使用方法类似. Vector<Integer> vec=new Vector<> (); ArrayList:Java.util.Array ...
- R 数据分析
目录: windows命令行中执行R dataframe 常用函数.变量 1.windows命令行中执行R 前提:已经把R的命令目录加入了系统路径中. 在windows中,命令行执行R可以用以下两种方 ...
- thinkphp 相关
路径重写,既模式2 需要.htaccess文件放到index.php同级, http.config文件 中当前项目目录配置 AllowOverride All LoadModule rewrite_ ...
- TestStack.White安装详解
一.安装 NuGet TestStack.White是通过NuGet进行安装的.NuGet最低支持VS2010.我使用的VS2015. 安装方式一 :从Visual Studio的工具->扩展和 ...