减少回表
在主表上查询过滤,同时开启limit分页并返回主键,再次关联主表,减少回表的次数。伪代码如下:
SELECT o1.* FROM orders o1
INNER JOIN (SELECT id FROM orders WHERE sn='XD12345678' LIMIT 10000,10) o2
ON o1.id = o2.id;
通过预先的处理数据:
-
筛选数据 -
提前分页丢弃数据
极大的减少了后续的数据处理。参考:避免写出致命 SQL,搞懂 MySQL 回表[1]
谓词下推
各业务表预先筛选过滤部分数据,再与主表关联查询,即提前将谓词下推到业务表,筛选过滤数据,再与主表关联查询,降低数据传输与数据计算。
总结
处理流图如下:

其实整个的分析来看,其思路与Doris的查询优化等如出一辙。只是说,目前的业务更偏向于单数据库而已,而Doris是分布式的存储。可参考:
聊聊分布式 SQL 数据库Doris(五)[2]
聊聊分布式 SQL 数据库Doris(七)[3]
避免写出致命 SQL,搞懂 MySQL 回表: https://juejin.cn/post/6938357172791148575
[2]
聊聊分布式 SQL 数据库Doris(五): https://www.cnblogs.com/zhiyong-ITNote/p/17858739.html
[3]
聊聊分布式 SQL 数据库Doris(七): https://www.cnblogs.com/zhiyong-ITNote/p/17861747.html
原文始发于微信公众号(阿郎小哥的随笔驿站):聊聊优化分页查询带来的思考
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/244124.html