在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引'。 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点: 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全部取出,在内存中排序后直接将结果输出 当对连接操作进行排序时,如果ORDER BY仅仅引用第一个表的列,MySQL对该表进行filesort操作,然后进行连接处理,此时,EXPLAIN输出“Using filesort”;否则,MySQL必须将查询的结果集生成一个临时表,在连接完成之后进行filesort操作,此时,EXPLAIN输出 “Using temporary;Using filesort” 以上就是mysql中关于覆盖索引的知识点总结的详细内容,更多关于mysql中什么是覆盖索引的资料请关注极客世界其它相关文章! |
请发表评论