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';
相关推荐
为了提高 JOIN 连接的速度,MySQL 提供了一些优化技术,例如 Multi-Range Read 和 Hash Join。 * Multi-Range Read:是一种优化技术,用于减少磁盘 I/O 次数,在查询二级索引时,使用 Multi-Range Read 可以减少回...
MySQL InnoDB MRR(Multi-Range Read)优化是一种提高数据库查询性能的技术,尤其对于机械硬盘上的数据访问,它能显著减少磁盘的随机读取,转而采用更接近顺序的访问模式。MRR 主要应用于范围查询(range)、引用...
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
重点讲解了慢查询、索引、Multi Range Read、Index Merge、ICP,等相关功能。这里均为本人的学习总结。内容有2附图1个来自书本、一个来自网络,其余均为本人原创。 未经运行不得商业使用。
二、Multi-Range Read (MRR) MRR是多范围读优化,它通过将随机IO转换为顺序IO来提升查询性能,尤其适用于IO密集型的查询。在MRR未启用时,查询过程会产生大量随机IO,效率低下。而启用MRR后,MySQL会先将辅助索引的...
本文主要探讨了一种名为Multi-Range Read (MRR)的优化技术,它能有效地改善JOIN操作的效率。 MRR优化主要针对InnoDB存储引擎,其目标是利用顺序读取来提高性能,减少磁盘的随机访问。当查询涉及回表(即从辅助索引...
3. **多范围读取优化**(Multi-Range Read Optimization, MRR):这一功能可以显著提高涉及多个索引范围查询的性能。 4. **性能模式增强**:MySQL 5.6引入了更多的性能监控工具,帮助管理员更好地理解数据库的工作...
- 引入了Batched Key Access (BKA) 和 Multi-Range Read (MRR) 技术,提高了索引访问效率。 - 支持Index Condition Pushdown (ICP),能够将索引条件过滤操作下推到存储引擎层执行,减少了数据扫描量。 - 对子查询...
PostgreSQL以页(默认8KB)为数据管理单位,通过预读(Read-Ahead)和多范围读(Multi-Range Read)等技术优化物理读写。而MySQL使用区(每个区默认1MB)作为数据管理单位,支持一次分配1至4个区,具有自动扩展至...
##### Multi-Range Read 多范围读取允许服务器在一次索引扫描中读取多个值范围,而不是为每个值范围进行单独的索引扫描,这对于范围查询特别有用。 ##### Batched Key Access 批处理键访问是一种优化技术,它可以...
- **MRR(Multi-Range Read)**:MySQL 6.0引入的优化技术,用于改善范围扫描时的随机I/O问题,提高查询效率。 #### 六、加速插入 - **插入优化**: - 使用批量插入减少I/O操作次数。 - 尽量避免在事务中频繁插入...
在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 ...
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 ...