SQL优化--索引
来源:互联网 发布:js代码的执行顺序 编辑:程序博客网 时间:2024/06/16 16:01
MYSQL目前支持4种索引:
- B-Tree索引:最常见的索引类型,大部分引擎都支持B树索引。
- Hash索引:只有Memory引擎支持,使用场景简单。
- R-Tree索引(空间索引) :空间索引是MyISAM的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少。
- Full-Text(全文索引):也是MyISAM的一个特殊索引类型,主要用于全文索引,InnoDB从MySQL5.6版本开始提供对全文索引的支持。
总结:Hash索引相对简单,只有Memory/Heap引擎支持Hash索引,因为适用于Key-Value查询,所以比B树更快,但它不适用范围查询。Memory/Heap引擎只有在“=”的条件下才会使用索引。
在利用B-Tree索引时,可以进行全关键字、关键字范围和关键字前缀查询。
- 全关键字:explain输出结果中字段type的值const,表示是常量。
- 关键字范围:type为range
- 匹配最左前缀:type为ref。注意,在col1+col2+col3字段上的联合索引能够被包含col1、(col1+col2)、(col1+col2+col3)的等值查询利用到,不能被col2、(col2+col3)的等值查询利用到。
-仅仅对索引进行查询:当查询的列都在索引的字段中时,查询的效率更高。
匹配列前缀:仅仅使用索引中的第一列,并且值包含索引第一列的开头一部分进行查找。
存在索引但不能使用索引的典型场景
- 以%开头的LIKE查询不能够利用B-Tree索引,执行计划中key的值为NULL表示没有只用索引。解决方式有两种:一是采用全文索引。二是使用InnoDB的表是聚簇表的特点,采用轻量级的解决方式,也就是扫描索引(因为索引比表小)获得相应的主键,再根据主键回表检索记录,这样就可以避开全表扫描的大量IO请求。
- 数据类型出现隐式转换的时候也不会使用索引,特别是当列类型是字符串,如果不加引号,即便这个列上有索引,也不会被用到。
- 复合索引的情况下,假如查询条件不包含索引列最左边部分,则不会使用复合索引。
- 使用索引比全表更慢,则不使用索引。
- 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。
查看索引使用情况
show status like ‘Handler_read%’;
如果索引正在工作,Handler_read_key的值将很高,这个值代表一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用。
Handler_read_rnd_next的值高则意味着查询运行低效,并且应该建立索引补救。
0 0
- SQL优化、索引优化
- SQL优化:索引优化
- 索引,通过索引优化sql
- 优化SQL Server索引
- 优化SQL Server索引
- SQL优化-索引
- SQL优化(索引问题)
- SQL优化(索引问题)
- sql Server 索引优化
- sql Server索引优化
- SQL优化-索引
- SQL 索引 数据库优化
- SQL优化-索引
- SQL优化-索引
- SQL优化(索引问题)
- SQL优化-索引
- sql Server 索引优化
- sql优化-索引
- RxJS入门(8)----创建一个完整的web application
- Linux下配置本地yum库
- 每秒处理10万订单乐视集团支付架构
- Intent 传递对象和集合
- Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
- SQL优化--索引
- iOS tableviewCell点击行高变高
- iOS打电话
- Eclipse 无法打断点-遇到带斜杠的断点图标
- Linux下redis编程:error while loading shared libraries: libhiredis.so.0.11
- 20160510 GreenPlum5 常用函数
- 无法逾越的鸿沟——CTSC && APIO 2016 滚粗记
- java HttpClient学习总结:基本http操作
- 安卓019Fragment