本文主要翻译自 MySQL官方文档对MRR的介绍 。
当表的数据非常多以至于无法放入缓存时,基于二级索引的范围扫描读取数据会造成较多的硬盘随机读。如果启用了MRR优化,MySQL首先会基于索引进行数据定位并收集满足条件的keys,然后再对这些keys进行排序,这样可以以主键的顺序进行表行的读取,能够减少随机读的数量。MRR优化的目的就是通过对keys排序后的一定程度的顺序读减少随机读的数量。
MRR的优点如下:
下面列出的场景能够证明MRR优化的优点:
场景A,在 InnoDB 和 MyISAM 基于索引范围访问和 equi-join *** 作时,MRR优化可以发挥作用:
场景B,MRR可以在 NDB 基于 multiple-range index 扫描和 equi-join 是发挥作用:
使用MRR时, EXPLAIN 输出的 Extra 列会显示 Using MRR 。
当不需要进行全表访问时(full table), InnoDB 和 MyISAM 不会进行MRR优化,因为如果查询结果可以基于索引得出(比如覆盖索引),那么使用MRR将没有意义。
系统变量 optimizer_switch 使用标识 mrr 控制是否启用MRR优化,如果配置启用MRR优化,标识 mrr_cost_based 用来决定是否基于代价来决定是否进行MRR优化。默认情况下,MRR为启用状态,并且 mrr_cost_based 也是启用状态。
启用MRR优化时, read_rnd_buffer_size 用于控制分配多大空间积累批量访问表行数据的索引数据。
1、首先,我们需要修改mysql的配置文件,一般文件存放在/etc下面,文件名为my.cnf。
2、对于mysql服务的启动,我们通常使用命令service mysqld start,没问题的话就能启动mysql服务了。
3、如何判断mysql服务有没有启动成功了,一个是通过查看进程的方式,我们使用命令ps -ef|grep mysqld,来查看。
4、当然,更为稳妥的方法是使用命令mysql -uuser -p passwd 来进行连接,看看是否能接上。
5、如何停止mysql的服务呢。方法也很简单,使用命令:service mysqld stop命令即可。
6、一般,如果mysql服务没有启动成功,可以通过查看错误日志的方式,日志默认路径/var/log/mysqld.log,
7、完成效果图。
1、按下win+R键打开“运行”,在输入框里面输入“cmd”,点击确定:
2、在命令行里面输入“net stop mysql”就是关闭mysql服务,输入“net start mysql”,接着按回车键,开启mysql服务:
3、重复第一步在mysql安装目录的bin文件下,打开一个新的命令行, 输入“mysql -uroot -p”,之后输入数据库密码就可以登录数据库了:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)