sql优化

作者: 闫子扬 | 来源:发表于2020-09-30 10:35 被阅读0次

    1. 大量数据的分页查询

    有一张财务流水表,未分库分表,目前的数据量为9555695,分页查询使用到了limit,优化之前的查询耗时16 s 938 ms (execution: 16 s 831 ms, fetching: 107 ms),按照下文的方式调整SQL后,耗时347 ms (execution: 163 ms, fetching: 184 ms);

    操作:查询条件放到子查询中,子查询只查主键ID,然后使用子查询中确定的主键关联查询其他的属性字段;原理:
    1、减少回表操作;
    2、可参考《阿里巴巴Java开发手册(泰山版)》第五章-MySQL数据库、(二)索引规约、第7条:
    【推荐】利用延迟关联或者子查询优化超多分页场景。
    说明: MySQL并不是挑过offeset行,而是取offset+N行,然后返回放弃前offset行,返回N行,那当offset特别大的时候,效率就非常的底下,要么控制返回的总页数,要么对超过特定阈值的页数进行SQL改写。
    正例: 先快速定位需要获取的id段,然后再关联:SELECT a.* FROM 表1 a,(select id from 表1 where 条件 LIMIT 100000,20) b where a.id = b.id;

    -- 优化前SQL
    SELECT  各种字段
    FROM `table_name`
    WHERE 各种条件
    LIMIT 0,10;
    
    -- 优化后SQL
    SELECT  各种字段
    FROM `table_name` main_tale
    RIGHT JOIN 
    (
    SELECT  子查询只查主键
    FROM `table_name`
    WHERE 各种条件
    LIMIT 0,10;
    ) temp_table ON temp_table.主键 = main_table.主键
    

    转:https://www.jianshu.com/p/0768ebc4e28d

    相关文章

      网友评论

          本文标题:sql优化

          本文链接:https://www.haomeiwen.com/subject/shduuktx.html