`
annan211
  • 浏览: 462588 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mysql Multi_Range_Read 优化

阅读更多



  mysql 多路范围读优化
mysql Multi_Range_Read 优化
  Multi_Range_Read 这个属性是5.6版本新加入的特性,主要用于将mysql随机读取IO转换为顺序读取IO,提高mysql性能。
  还有一点就是可以将范围查找转变为键值对匹配,提高查找的精确度以减少磁盘IO。
 
  先来说第一个概念,随机IO转为顺序IO.
  在没有Multi_range_read这个属性的时候,sql执行计划就是根据where条件在数据文件中找出数据,利用索引的时候,则根据索引列找出数据。
  在这里还需要简单回顾一下索引的概念。因为篇幅中心,所以只简单介绍一下辅助索引和聚集索引。
  辅助索引大多数时候是不能直接找出所需要的数据列的,必须根据主键索引再次查找。
    请尊重知识,请尊重原创 更多资料参考请见  http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1
  所以在上面的第一种情况下,根据辅助索引找出的结果集中,还必须根据主键索引找出完整数据列。由于mysql存储数据的方式,辅助索引和主键索引的顺序是不一致的,
  所以 根据主键索引去查找的时候,是随机查找,效率低下。
 
  当开启Multi_Range_read的时候,根据辅助索引查找到结果集,之后在结果集中对数据按照主键进行排序,之后根据已经有序的主键区读取数据列,这时候是顺序
  读取,效率较高。
 
  在我们使用了Multi_Range_Read这个属性的时候,sql执行计划包含 Using MRR
 
 
  再来说说将范围匹配转化为键值对查找。
  例如以下sql  msql> select * from lay where pt1 >1000 and pt1 < 3000 and pt2 = 999;
  如果我们没有Multi_Range_Read这个属性的时候,sql执行计划 是 先根据pt1的范围找出数据,然后将找出的数据再根据条件pt2过滤出来。
  这样的话,就会找出很多无用的数据,增加了IO开销,这是无意义的。
 
  当我们开启了Multi_Range_Read这个属性的时候,优化器会将查询条件转换为(1000,999),(1001,999),(1002,999)....(2999,999),这样的话就不会找出多余的数据,
  减少了无用的IO,提高了性能。
 
  如何开启这个属性呢? 我们可以通过命令 mysql> show variables like '%optimizer_switch%' 查看是否开启了这个属性。
  如果mrr=on,mrr_cost_based=off 则表示始终开启MRR优化。
  也可以通过命令开启  mysql>set @@optimizer_switch='mrr=on,mrr_cost_based=off';

 

分享到:
评论

相关推荐

    MySQL JOIN 工作原理浅析1

    为了提高 JOIN 连接的速度,MySQL 提供了一些优化技术,例如 Multi-Range Read 和 Hash Join。 * Multi-Range Read:是一种优化技术,用于减少磁盘 I/O 次数,在查询二级索引时,使用 Multi-Range Read 可以减少回...

    MySQL InnoDB MRR优化指南

    MySQL InnoDB MRR(Multi-Range Read)优化是一种提高数据库查询性能的技术,尤其对于机械硬盘上的数据访问,它能显著减少磁盘的随机读取,转而采用更接近顺序的访问模式。MRR 主要应用于范围查询(range)、引用...

    sphinx 参考手册和源程序

    Coreseek 全文检索服务器 2.0 (Sphinx 0.9.8)参考手册和源程序 ...8.4.5. read_timeout 8.4.6. max_children 8.4.7. pid_file 8.4.8. max_matches 8.4.9. seamless_rotate 8.4.10. preopen_indexes 8.4.11. unlink_old

    MySQL数据库性能优化之入门.pdf

    重点讲解了慢查询、索引、Multi Range Read、Index Merge、ICP,等相关功能。这里均为本人的学习总结。内容有2附图1个来自书本、一个来自网络,其余均为本人原创。 未经运行不得商业使用。

    【mysql】关于ICP、MRR、BKA等特性1

    二、Multi-Range Read (MRR) MRR是多范围读优化,它通过将随机IO转换为顺序IO来提升查询性能,尤其适用于IO密集型的查询。在MRR未启用时,查询过程会产生大量随机IO,效率低下。而启用MRR后,MySQL会先将辅助索引的...

    35.join语句怎么优化?1

    本文主要探讨了一种名为Multi-Range Read (MRR)的优化技术,它能有效地改善JOIN操作的效率。 MRR优化主要针对InnoDB存储引擎,其目标是利用顺序读取来提高性能,减少磁盘的随机访问。当查询涉及回表(即从辅助索引...

    mysql 5.6 原版

    3. **多范围读取优化**(Multi-Range Read Optimization, MRR):这一功能可以显著提高涉及多个索引范围查询的性能。 4. **性能模式增强**:MySQL 5.6引入了更多的性能监控工具,帮助管理员更好地理解数据库的工作...

    MySQL 开发

    - 引入了Batched Key Access (BKA) 和 Multi-Range Read (MRR) 技术,提高了索引访问效率。 - 支持Index Condition Pushdown (ICP),能够将索引条件过滤操作下推到存储引擎层执行,减少了数据扫描量。 - 对子查询...

    PostgreSQL和MySQL存储层深度解析

    PostgreSQL以页(默认8KB)为数据管理单位,通过预读(Read-Ahead)和多范围读(Multi-Range Read)等技术优化物理读写。而MySQL使用区(每个区默认1MB)作为数据管理单位,支持一次分配1至4个区,具有自动扩展至...

    Query Optimization with MySQL 5.7 and MariaDB 10 Even newer tricks

    ##### Multi-Range Read 多范围读取允许服务器在一次索引扫描中读取多个值范围,而不是为每个值范围进行单独的索引扫描,这对于范围查询特别有用。 ##### Batched Key Access 批处理键访问是一种优化技术,它可以...

    mysql索引与sql调优

    - **MRR(Multi-Range Read)**:MySQL 6.0引入的优化技术,用于改善范围扫描时的随机I/O问题,提高查询效率。 #### 六、加速插入 - **插入优化**: - 使用批量插入减少I/O操作次数。 - 尽量避免在事务中频繁插入...

    more mastering the art of indexing 1

    在MySQL 6.0版本中引入了多范围读取(Multi-Range Read,MRR)特性,该特性可以显著提高索引范围扫描的效率。 - MRR通过预读取所需的数据块来减少磁盘I/O操作次数,从而加快查询速度。 **覆盖索引(Index-Only Read...

    数据库索引

    在某些情况下,执行计划的Extra列中可能会出现`MRR`(Multi Range Read)的提示。这意味着InnoDB存储引擎使用了多范围读取优化,这是一种在查询涉及多个索引范围时使用的优化技术。通过使用MRR,InnoDB可以减少磁盘...

    端口查看工具

    in the wrong monitor, on multi-monitors system. * Version 2.05: o Added support for GeoLite City database. You can now download the GeoLite City database (GeoLiteCity.dat.gz), put it in the same ...

    drupal 6.12

    if you use the multi-site setup, as explained below. 5. CONFIGURE DRUPAL When the install script succeeds, you will be directed to the "Welcome" page, and you will be logged in as the ...

Global site tag (gtag.js) - Google Analytics