MySQL 5.6新特性 -- Multi-Range Read

如果基表很大,数据没有被缓存,在二级索引上使用范围扫描读取行可能会导致大量的随机磁盘访问。使用Multi-Range Read新特性,mysql可以减少对磁盘的随机读的次数:首先,mysql只是扫描索引,收集相关行的keys;然后,将收集到的keys进行排序;最后通过有序的主键去访问基表。

Multi-Range Read特性的目的就是减少对磁盘的随机访问,进而对基表执行更多的顺序扫描。

使用MRR后,执行计划中extra部分会显示"using mrr"

-如果需要表进行全表扫描,innodb和myisam不使用mrr。
-索引能覆盖的时候,mrr特性也用不上。
-Multi-Range Read(MRR) 可以用于range、ref、eq_ref类型的查询。

未开启MRR之前:由于MySQL存储数据的方式: 辅助索引的存储顺序并非与主键的顺序一致,从图中可以看出,根据辅助索引获取的主键来访问表中的数据会导致随机的IO。不同主键不在同一个page里面时必然导致多次IO和随机读。

使用MRR之后:

开启/关闭MRR

set optimizer_switch=‘mrr=on mrr_cost_based=on‘; #mrr_cost_based表示开启mrr后,优化器是否根据cost来决定是否使用mrr
set oprimizer_switch=‘mrr=off‘;

默认是开启MRR的。

对于MRR,参数read_rnd_buffer_size用来控制键值缓冲区的大小。

时间: 2024-07-29 06:40:27

MySQL 5.6新特性 -- Multi-Range Read的相关文章

MySQL 5.7 新特性大全和未来展望

MySQL 5.7 新特性大全和未来展望 jopen 2015-12-31 16:06:46 • 发布 摘要:美图公司数据库高级 DBA,负责美图后端数据存储平台建设和架构设计.前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计.之前在「高可用架构」发表的<单表 60 亿记录等大数据场景的 MySQL 优化和运维之道>广受好评. 本文转自微信公众号: 高可用架构 作者:杨尚刚 引用 美图公司数据库高级 DBA,负责美图后端数据存储平台建设和架构设计.

Mysql 8.0 新特性测试

Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Postgresql和Mariadb中早已存在role这个特性. create role role_test; grant select,insert,delete,update on zhongwc.tab01 to role_test; create user 'user1'@'%' identif

MySQL 5.7新特性介绍

1. 介绍 身处MySQL这个圈子,能够切身地感受到大家对MySQL 5.7的期待和热情,似乎每个人都迫不及待的想要了解.学习和使用MySQL 5.7.那么,我们不禁要问,MySQL 5.7到底做了哪些改进,引入了哪些新功能,性能又提升了多少,能够让大家翘首以盼,甚至欢呼雀跃呢? 下面就跟随我来一起了解一下MySQL 5.7的部分新功能.想要在一篇文章中介绍完MySQL 5.7的所有改进,几乎是不可能的.所以,我会选择一些有特别意思的.特别有用的功能进行介绍.希望通过这篇文章,能够激发大家对My

MySQL 5.7新特性之generated column

MySQL 5.7引入了generated column,这篇文章简单地介绍了generated column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕以下几个问题展开: generated column是什么 virtual column与stored column的区别 如果我对generated column做一些破坏行为会怎么样 generated column上创建索引 generated column上创建索引与Oracle的函数索引的

Mysql 5.6 新特性(转载)

本文转载自 http://blog.csdn.net/wulantian/article/details/29593803 感谢主人的辛苦整理 一,安全提高 1.提供保存加密认证信息的方法,使用.mylogin.cnf文件.使用mysql_config_editor可以创建此文件.这个文件可以进行连接数据库的访问授权.mysql_config_editor会进行加密而不是明文存储.客户端只会在内存中进行解密.这样密码以非明文方式存储,不会在命令行或者环境变量中暴露.更多信息,访问 Section

MySQL 5.5 新特性体验

由于工作中采用了新的MySQL版本(5.6),之前一直在用5.1 :为了方便优化,体验了一下新版本的特性 1 cpu 多核处理 以前这个参数是  innodb_file_io_threads , 5.5 根据读和写改成了两个参数,好处是可以根据读写设置cpu的数量,但仍然不支持动态修改. mysql> show variables like '%io_thread%' ; +-------------------------+-------+ | Variable_name          

MySQL 5.6新特性 -- Index Condition Pushdown

Index Condition Pushdown(ICP)是针对mysql使用索引从表中检索行数据时的一种优化方法. 在没有ICP特性之前,存储引擎根据索引去基表查找并将数据返回给mysql server,mysql server再根据where条件进行数据过滤. 有了ICP之后,在取出索引的同时,判断是否可以根据索引中的列进行where条件过滤,也就是将where的部分过滤操作放在了存储引擎层.这样就会减少上层sql层对记录的获取. ICP优化支持range.ref.eq_ref.ref_or

MySQL 8.0新特性

一.MySQL 8.0中添加的功能 1.新的系统字典表 整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用InnoDB引擎进行存储 2.支持DDL 原子操作 InnoDB表的DDL支持事务完整性,要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作 3.安全和用户管理 新增caching_sha2_password认证插件,并且是默认的身份认证插件.性能和安全方面加强 权限支持role 新增密码

MySQL 5.7 新特性之增强半同步复制

1. 背景介绍 半同步复制 普通的replication,即mysql的异步复制,依靠mysql二进制日志也即binary log进行数据复制.比如两台机器,一台主机(master),另外一台是从机(slave). 正常的复制为:事务一(t1)写入binlog buffer:dumper 线程通知slave有新的事务t1:binlog buffer 进行checkpoint:slave的io线程接收到t1并写入到自己的的relay log:slave的sql线程写入到本地数据库. 这时,mast