当需要查询大量数据的时候,引擎层访问数据、SQL层的交互和计算都会占用大量的开销。PolarDB MySQL版会将优化器扫描下推到引擎层进行计算,极大的减少性能开销,提升查询性能。
前提条件
集群版本需为PolarDB MySQL版8.0版本且修订版本需满足如下条件:
- 8.0.1.1.5或以上。
- 8.0.2.2.0 或以上。
如何查看集群版本,请参见查询版本号。
背景信息
在社区MySQL版本8.0.13中,count(*)操作并没有由InnoDB引擎执行,每一行访问的交互代价依然很大。在社区MySQL版本8.0.18中,其并行扫描虽然实现了在InnoDB引擎中快速遍历page中的行记录,但引擎会忽视优化器选择的路径,强制选择主键路径。
PolarDB MySQL版真正实现了扫描的完全下推,它会在优化器选择的索引page上快速遍历(FastTraverse)数据行。同时也规避了回表、MVCC恢复快照版本长时间持有page锁对数据更新的影响。
使用方法
扫描完全下推(FastTraverse)功能在支持的版本上默认开启。
示例
本文基于TPCH的Schema进行举例。执行EXPLAIN SQL查看执行计划。
mysql> EXPLAIN SELECT COUNT(*) FROM lineitem\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: lineitem
partitions: NULL
type: index
possible_keys: NULL
key: i_l_shipdate
key_len: 4
ref: NULL
rows: 59440464
filtered: 100.00
Extra: Using index性能效果
基于TPCH 10 scale的数据,针对上文所述的查询示例。社区MySQL 8.0.13版本、社区MySQL 8.0.18版本(innodb_parallel_read_threads取值为1)与PolarDB的性能对比如下:
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




