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 中,这样排序后就会直接从内存里面返回查询结果了,不用再回到原表去取数据。

  • 相关阅读:
    线程共享全局变量和私有全局变量
    线程退出前操作
    Linux下线程pid和tid
    几种常见的光纤接头(ST,SC,LC,FC)以及PC、APC和UPC的区别
    Javascript对象及数组用法笔记
    Javascript对象及数组用法笔记
    程序员特有的9个坏习惯
    程序员特有的9个坏习惯
    程序人生:真正的效率源自专注
    程序人生:真正的效率源自专注
  • 原文地址:https://www.cnblogs.com/dong320/p/14888559.html
Copyright © 2011-2022 走看看