这一招能让 MariaDB 提速 30 倍!

是的,这标题有点“标题党”,但在本例中,运行一条 SQL 命令确实让社区用户的性能提高了这么多。这也能帮助你。

故事

一位社区用户在几个地方发帖称,将大型 WordPress 安装迁移到 MariaDB 时,发现某个查询性能极差。该查询执行耗时 1.5 秒,从执行计划(explain plan)中可以清楚地看出,优化器在决定连接顺序时没有做出理想的判断。

该查询是由 WordPress 生成的,因此不容易强制使用索引或重写查询。

解决方案

我建议用户在所有相关表上运行这条命令

ANALYZE TABLE tbl PERSISTENT FOR ALL;

用户执行后,效果让他们惊叹不已。查询执行时间突然降至 0.05 秒。

原因

速度慢的原因是优化器对数据本身一无所知。它不得不对数据的分布进行假设,但不幸的是这些假设是错误的。

“ANALYZE TABLE” 命令会生成并存储数据的直方图。这使得优化器能够更好地估计索引中值的频率,从而对连接顺序和过滤做出更好的决策。

要了解更多信息,你可以观看关于此主题的MariaDB Server Fest 2021 录像。还有一个知识库文章描述了它是如何提供帮助的,另一篇文章描述了“ANALYZE TABLE” 命令的使用方法。

特色图片使用 CC BY 4.0 授权,来源:IconScout 上的速度优化插画

发布者:Andrew Hutchings

MariaDB 基金会首席贡献官