支持Multi Range Read索引优化

原文:http://book.51cto.com/art/201701/529465.htm

http://book.51cto.com/art/201611/521479.htm

《MySQL管理之道:性能调优、高可用与监控(第2版)》第2章MySQL 5.7与MariaDB 10.1的新特性,本章主要讲解MySQL 5.7 和 InnoDB 的一些增强性能,这些增强性能极大地提高了系统和MySQL的性能。下面将详细介绍每一个关键的增强性能及其实现过程。本节为大家介绍支持Multi Range Read索引优化。

作者:贺春旸来源:机械工业出版社|2017-01-23 19:11

2.7.7 支持Multi Range Read索引优化

对大表(基于辅助索引)进行范围扫描时,会导致产生许多随机I/O。而对于普通磁盘来说,随机I/O的性能很差,会遇到瓶颈,在MySQL 5.6/5.7和MariaDB 5.3/5.5/10.0/10.1版本里对这种情况进行了优化,一个新的名词Multi Range Read(MRR)出现了,优化器会先扫描索引,然后收集每行的主键,并对主键进行排序,此时就可以用主键顺序访问基表,即用顺序I/O代替随机I/O。

未开启MRR时,在explain中看到的情况如图2-127所示。

查询i2>2000 and i2<4000记录时,未开启MRR会产生随机I/O,如图2-128所示。

开启MRR后,在explain中看到的情况如图2-129所示。

查询i2>2000和i2<4000记录时,已开启MRR,故会对主键排序,将随机I/O转换为顺序I/O,从而提高数据库的整体性能,如图2-130所示。

针对这两种情况进行对比测试,分别如图2-131和图2-132所示。

从图2-131和图2-132中可以明显看到未开启MRR耗时更长,为1分47秒,开启MRR耗时为0.34秒。

Multi Range Read索引优化在MySQL 5.7版本中默认开启,可以通过语句show variables like 'optimizer_switch'\G;来查看:

  1. mysql> show variables like 'optimizer_switch'\G;
  2. *************************** 1. row ***************************
  3. variable_name: optimizer_switch
  4. Value: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=on,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on
  5. 1 row in set (0.00 sec)

Multi Range Read索引优化在MariaDB 10.1版本中默认是关闭的,可以通过语句show variables like 'optimizer_switch'\G;来查看:

  1. Variable_name: optimizer_switch
  2. Value: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on

动态开启MRR的命令如下:

    1. set global optimizer_switch='mrr=on,mrr_cost_based=on,mrr_sort_keys=on';
    2. set global mrr_buffer_size = 32*1024*1024;

(转)支持Multi Range Read索引优化的更多相关文章

  1. MySQL 索引优化全攻略

    所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找.而用的最多,并且是mysql默认的就是二叉树算法 BTREE, ...

  2. Mysql 索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  3. mysql索引优化比普通查询速度快多少

    mysql索引优化比普通查询速度快多少 一.总结 一句话总结:普通查询全表查询,速度较慢,索引优化的话拿空间换时间,一针见血,所以速度要快很多. 索引优化快很多 空间换时间 1.软件层面优化数据库查询 ...

  4. mySql索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  5. MySQL索引优化详解

    MySQL存储引擎简介 查看命令 a. 查看所使用的MySQL现在已提供什么存储引擎: mysql> show engines; b. 查看所使用的MySQL当前默认的存储引擎: mysql&g ...

  6. MySQL高级第二章——索引优化分析

    一.SQL性能下降原因 1.等待时间长?执行时间长? 可能原因: 查询语句写的不行 索引失效(单值索引.复合索引) CREATE INDEX index_user_name ON user(name) ...

  7. Mysql优化(出自官方文档) - 第八篇(索引优化系列)

    目录 Mysql优化(出自官方文档) - 第八篇(索引优化系列) Optimization and Indexes 1 Foreign Key Optimization 2 Column Indexe ...

  8. MySQL高级学习笔记(四):索引优化分析

    文章目录 性能下降 SQL慢 执行时间长 等待时间长 查询语句写的烂 查询数据过多 关联了太多的表,太多join 没有利用到索引 单值 复合 服务器调优及各个参数设置(缓冲.线程数等)(不重要DBA的 ...

  9. mysql 索引优化 性能调优 锁

    1 检查mysql 是否安装 rpm -qa|grep -i mysql 2 ntsysv 查看和设置开机启动列表 3 mysql 在 centos 上默认 的数据目录是 /var/lib/mysql ...

随机推荐

  1. 使用vbs给PPT(包括公式)去背景

    在 视图—>宏 内新建宏 '终极版 Sub ReColor() Dim sld As Slide Dim sh As Shape For Each sld In ActivePresentati ...

  2. SqlCommand和SqlDataAdapter的区别

    SqlDataAdapter对象 一.特点介绍1.表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接.2.在SqlDataAdapter和DataSet之 ...

  3. Hive 1.2.1&Spark&Sqoop安装指南

    目录 目录 1 1. 前言 1 2. 约定 2 3. 服务端口 2 4. 安装MySQL 2 4.1. 安装MySQL 2 4.2. 创建Hive元数据库 4 5. 安装步骤 5 5.1. 下载Hiv ...

  4. PhotoModeler Scanner教程

    Marking and Referencing 标记和校正 标记和校正是通过多张照片人工匹配共同特征的过程.点击一张图片的明显视觉特征,然后将它匹配到不同角度拍摄的其他图片的相同特征上. Approp ...

  5. MySQL性能调优与架构设计——第13章 可扩展性设计之 MySQL Replication

    第13章 可扩展性设计之 MySQL Replication 前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instan ...

  6. 20155323 2016-2017-2 《Java程序设计》第6周学习总结

    20155323 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 串流:衔接数据的来源和目的地就是串流对象. I/O操作主要是指使用Java进行输入,输出操作 ...

  7. noip第10课作业

    1.     统计不同类型字符出现次数 [问题描述] 输入一个字符串(假设长度不超过1000个字符),统计其中大写,小写,数字,其他字符出现的次数. [样例输入]Hello,what are you ...

  8. Android操作HTTP实现与服务器通信

    (转自http://www.cnblogs.com/hanyonglu/archive/2012/02/19/2357842.html) 本示例以Servlet为例,演示Android与Servlet ...

  9. Elasticsearch 健康状态处理

    笔者在自己的 ubuntu 服务器上使用 GET /_cat/health?v 命令时,返回值如下所示 可以看到集群状态为 yellow,这是什么意思呢?原来在 es 的集群状态中,有三种情况,官网描 ...

  10. 一起学习MVC(1)初步了解MVC

    MVC 即模型视图控制器(Model View Controller)     利于团队开发.便于管理与维护.代码易读性强.未来的主流开发框架结构. 当然,缺点也显而易见,与传统开发框架相比有很大的不 ...