当需要查询大量数据的时候,引擎层访问数据、SQL层的交互和计算都会占用大量的开销。PolarDB MySQL版会将Limit Offset下推到引擎层进行计算,极大的减少性能开销,提升查询性能。
前提条件
集群版本需为PolarDB MySQL版8.0版本且修订版本需满足如下条件:
8.0.1.1.16或以上。
8.0.2.2.0 或以上。
使用限制
查询SQL中的Offset取值要大于512。
您可以配置ignore_polar_optimizer_rule为ON,忽略该限制。
使用方法
通过系统参数loose_optimizer_switch中的limit_offset_pushdown开启Limit Offset下推优化功能。
示例
本文基于TPCH的Schema进行举例。当开启Limit Offset下推功能,执行EXPLAIN SQL查看执行计划时,Extra列会展示为Using limit-offset pushdown。
- 普通Limit Offset场景
下面的示例中查询Q1访问主表且无谓词条件
EXPLAIN SELECT * FROM lineitem LIMIT 10000000,10\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: lineitem partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 59440464 filtered: 100.00 Extra: Using limit-offset pushdown
复制
- 带有谓词条件的Limit Offset场景
对于带有谓词条件的查询,如果谓词条件能够完全体现在引擎的范围扫描中,那么谓词条件就会被谓词完全下推功能移除。此时Limit Offset也可以被下推。
下面的示例中查询Q3访问二级索引,且包含二级索引范围条件,同时需要回表获取其他列的信息
EXPLAIN SELECT * FROM lineitem WHERE l_partkey > 10 AND l_partkey < 200000 LIMIT 5000000, 10\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: lineitem partitions: NULL type: range possible_keys: i_l_partkey,i_l_suppkey_partkey key: i_l_suppkey_partkey key_len: 5 ref: NULL rows: 11123302 filtered: 100.00 Extra: Using limit-offset pushdown
复制
- 带有Order by且可以利用索引排序的Limit Offset场景
在标准的分页查询中,需要使用Order by明确查询结果顺序。对于选择的索引提供Order排序的场景,在SQL层谓词被移除后,也可以将Limit Offset下推。
EXPLAIN SELECT * FROM lineitem WHERE l_partkey > 10 AND l_partkey < 200000 ORDER BY l_partkey LIMIT 5000000, 10\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: lineitem partitions: NULL type: range possible_keys: i_l_partkey,i_l_suppkey_partkey key: i_l_suppkey_partkey key_len: 5 ref: NULL rows: 11123302 filtered: 100.00 Extra: Using limit-offset pushdown
复制
最后修改时间:2023-06-25 10:58:55
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
国内独家|阿里云首发MongoDB 8.0,性能提升“快”人一步
阿里云瑶池数据库
225次阅读
2025-04-24 09:53:13
SQL 优化之 OR 子句改写
xiongcc
143次阅读
2025-04-21 00:08:06
揭秘PostgreSQL SELECT查询中的意外“写”行为
PolarDB
53次阅读
2025-04-15 09:56:40
4年10亿美金,Neon用Serverless PG证明:AI需要的不是“大”,而是“隐形”
阿里云瑶池数据库
49次阅读
2025-05-08 10:03:12
秒级修改字段
胖橘
48次阅读
2025-04-23 11:33:45
PolarDB MySQL之列存索引(IMCI)性能
xiaozhuo
46次阅读
2025-04-21 16:11:53
PolarDB MySQL之列存索引测试方法
xiaozhuo
45次阅读
2025-04-21 16:06:42
PolarDB MySQL之在只读节点上创建自定义临时表
xiaozhuo
45次阅读
2025-04-21 15:49:05
QPlus V6.3 更新,新增PostgreSQL与PolarDB PG支持,OceanBase 容灾管理重磅上线
沃趣科技
43次阅读
2025-05-13 09:39:27
PostgreSQL 虚拟文件描述符
PolarDB
43次阅读
2025-04-25 10:10:46