zoukankan      html  css  js  c++  java
  • Mysql中有哪些减少回表的操作?

    回表是指,InnoDB 在普通索引 a 上查到主键 id 的值后,再根据一个个主键 id 的值到主键索引上去查整行数据的过程。

    • 使用覆盖索引

      • 如果 select 的数据列只用从索引中就能够取得,不必从数据区中读取,这时候使用的索引就叫做覆盖索引

      • Explain 中 Using index,表示这个语句使用了覆盖索引。

    • 索引下推

      在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数

    • join语句中的MRR优化,通过这个优化的主要目的是尽量使用顺序读盘

      • 回表肯定是一行行搜索主键索引的。虽然“按行查”这个机制不能改,但是调整查询的顺序,还是能够加速的。

      • 在join的时候,会一次取出一批数据的字段到join_buffer中,然后批量join,对这批数据进行递增排序,因为按照主键的递增顺序查询的话,对磁盘的读比较接近顺序读,能够提升读性能。顺序读,利用到了磁盘预读,会一次读取一个数据页(索引页)到内存中,下次查询相邻的数据就可以直接从内存中读

    • 利用延迟关联或者子查询优化超多分页场景

    • Mysql在进行order by 排序的时候,如果 MySQL 认为内存足够大,会优先选择全字段排序,把需要的字段都放到 sort_buffer 中,这样排序后就会直接从内存里面返回查询结果了,不用再回到原表去取数据。

  • 相关阅读:
    CF1051F The Shortest Statement 题解
    CF819B Mister B and PR Shifts 题解
    HDU3686 Traffic Real Time Query System 题解
    HDU 5969 最大的位或 题解
    P3295 萌萌哒 题解
    BZOJ1854 连续攻击游戏 题解
    使用Python编写的对拍程序
    CF796C Bank Hacking 题解
    BZOJ2200 道路与航线 题解
    USACO07NOV Cow Relays G 题解
  • 原文地址:https://www.cnblogs.com/dong320/p/14888559.html
Copyright © 2011-2022 走看看