如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引'。

覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点:

1、索引项通常比记录要小,所以MySQL访问更少的数据。

2、索引都按值得大小存储,相对于随机访问记录,需要更少的I/O。

3、数据引擎能更好的缓存索引,比如MyISAM只缓存索引。

4、覆盖索引对InnoDB尤其有用,因为InnoDB使用聚集索引组织数据,如果二级索引包含查询所需的数据,就不再需要在聚集索引中查找了。

限制:

1、覆盖索引也并不适用于任意的索引类型,索引必须存储列的值。

2、Hash和full-text索引不存储值,因此MySQL只能使用BTree。

3、不同的存储引擎实现覆盖索引都是不同的,并不是所有的存储引擎都支持覆盖索引。

4、如果要使用覆盖索引,一定要注意SELECT列表值取出需要的列,不可以SELECT * ,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。

知识点扩充:

1、两遍扫描算法(Two passes)

实现方式是先将须要排序的字段和可以直接定位到相关行数据的指针信息取出,然后在设定的内存(通过参数sort_buffer_size设定)中进行排序,完成排序之后再次通过行指针信息取出所需的Columns

注:该算法是4.1之前采用的算法,它需要两次访问数据,尤其是第二次读取操作会导致大量的随机I/O操作。另一方面,内存开销较小

2、 一次扫描算法(single pass)

该算法一次性将所需的Columns全部取出,在内存中排序后直接将结果输出

注: 从 MySQL 4.1 版本开始使用该算法。它减少了I/O的次数,效率较高,但是内存开销也较大。如果我们将并不需要的Columns也取出来,就会极大地浪费排序过程所需要 的内存。在 MySQL 4.1 之后的版本中,可以通过设置 max_length_for_sort_data 参数来控制 MySQL 选择第一种排序算法还是第二种。当取出的所有大字段总大小大于 max_length_for_sort_data 的设置时,MySQL 就会选择使用第一种排序算法,反之,则会选择第二种。为了尽可能地提高排序性能,我们自然更希望使用第二种排序算法,所以在 Query 中仅仅取出需要的 Columns 是非常有必要的。

当对连接操作进行排序时,如果ORDER BY仅仅引用第一个表的列,MySQL对该表进行filesort操作,然后进行连接处理,此时,EXPLAIN输出“Using filesort”;否则,MySQL必须将查询的结果集生成一个临时表,在连接完成之后进行filesort操作,此时,EXPLAIN输出 “Using temporary;Using filesort”

以上就是mysql中关于覆盖索引的知识点总结的详细内容,更多关于mysql中什么是覆盖索引的资料请关注脚本之家其它相关文章!

mysql覆盖索引二次查找_mysql中关于覆盖索引的知识点总结相关推荐

  1. mysql教程联合索引_MySQL中的联合索引学习教程

    联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...

  2. mysql的学习要点_MySQL中的联合索引的学习要点总结

    MySQL中的联合索引的学习要点总结 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a ...

  3. numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array)

    numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array) 目录

  4. numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row)

    numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row) 目录

  5. numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array)

    numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array) 目录 numpy使用[]语法索引二维numpy ...

  6. numpy使用[]语法索引二维numpy数组中指定范围数据行的数值内容(accessing rows in numpy array with specific range)

    numpy使用[]语法索引二维numpy数组中指定范围数据行的数值内容(accessing rows in numpy array with specific range) 目录

  7. numpy使用[]语法索引二维numpy数组中指定指定行之前所有数据行的数值内容(accessing rows in numpy array before specifc row)

    numpy使用[]语法索引二维numpy数组中指定指定行之前所有数据行的数值内容(accessing rows in numpy array before specifc row) 目录

  8. numpy使用[]语法索引二维numpy数组中指定指定列之后所有数据列的数值内容(accessing columns in numpy array after specifc column)

    numpy使用[]语法索引二维numpy数组中指定指定列之后所有数据列的数值内容(accessing columns in numpy array after specifc column) 目录

  9. numpy使用[]语法索引二维numpy数组中指定数据列的数值内容(accessing the specific column in numpy array)

    numpy使用[]语法索引二维numpy数组中指定数据列的数值内容(accessing the specific column in numpy array) 目录 numpy使用[]语

最新文章

  1. 2020春季学期作业提交统计处理
  2. 输入输出--公用继承
  3. 关于window.history.back()后退问题
  4. lammps计算聚合物例子_LAMMPS模拟聚合物结构,非晶态聚合物变形行为的模拟,纳米线变形模拟,单轴张力模拟,晶格参数计算...
  5. CentOS配置syslog发送到服务器
  6. VO、DTO、POJO、PO的区别
  7. ORACLE 常用函数——字符函数
  8. git+vue项目实战
  9. 探索ESP8285(3)通过EMQX服务器点亮一个LED灯
  10. 小米笔记本pro 双硬盘双系统 opencore引导安装黑苹果
  11. 大华设备无法注册EasyGBS国标视频平台,是什么原因?
  12. ServerSocket与Socket入门详解
  13. DSPE-PEG12-Mal,C72H135N2O23P长臂亲水性小分子PEG试剂
  14. 【MockJS】使用MockJS模拟数据 (超级详细)
  15. 线上事件处理流程规范
  16. 三级数据库技术|重要知识点(一)
  17. Linux的DNS设置
  18. Python爬虫:AcFun弹幕视频网!太清晰了!
  19. 计算机二级报名时间2020年12月江苏省,2020年12月计算机二级考试报名时间及考试安排...
  20. envi classic中怎么进行掩膜处理?为什么是非黑即白?

热门文章

  1. 【jmx】JMX最佳实践与详解
  2. 【Elasticsearch】 es 7.6 索引墓碑
  3. Spark之hive的UDF自定义函数
  4. 【kafka】Kafka管理与监控
  5. spark学习-41-Spark的块传输服务BlockTransferService
  6. 数据结构知识点大汇总(二)
  7. 云计算实战系列十五(SQL I)
  8. Lambda学习笔记
  9. 实用网址(平时记下的)
  10. FastDFS介绍并在centos7中安装