【问题标题】:how to know the behavior of MariaDB engine如何知道 MariaDB 引擎的行为
【发布时间】:2022-01-27 05:56:47
【问题描述】:

我是 MySQL/MariaDB 的新手。

我正在比较 MS SQL 和 MariaDB 中存储过程的性能,发现 MariaDB 的性能比 MS SQL 慢。我发现相同的查询在 MariaDB 中比在 MSSQL 中花费的时间更多。事实上,我必须在存储过程中的临时表上添加一个索引,这在 MS SQL 中是不需要的。为什么会出现这种结果。 我如何以及在哪里可以更深入地了解 MariadB 引擎的行为,例如执行计划(详细)。哪个性能监控工具(开源)将帮助我处理慢查询以及慢查询日志以外的优化。

我如何在下面的代码中使用 EXPLAIN CREATE TEMPORARY TABLE tmp_ABC AS SELECT * from tbl_ABC

问候, 索米克·沃拉

【问题讨论】:

  • 使用EXPLAIN命令查看执行计划。
  • 我如何在下面的代码中使用 EXPLAIN 你想获得什么作为 CREATE TABLE 的执行计划???查看查询的 SELECT 部分的执行计划(这对显示的查询没有意义)。

标签: mysql mariadb query-optimization groupwise-maximum


【解决方案1】:

获取执行计划信息的三种方式(按详细顺序):

  • EXPLAIN SELECT ...
  • EXPLAIN FORMAT=JSON SELECT ...
  • 打开“优化器跟踪”。

EXPLAIN 适用于SELECT 以外的一些查询。如果它不适用于您的CREATE,只需将其应用于SELECT。 (无论哪种情况,那个查询都会有一个非常简单的解释。)

innodb_buffer_pool_size 是 MariaDB 中最重要的设置;它大约是可用 RAM 的 70%?

MySQL/MariaDB 在某些情况下会自动生成索引派生表 (FROM ( SELECT ... ));但不在临时表上。

有几种技术可以避免显式 (CREATE TEMPORARY TABLE ...) 临时表的需要;您愿意向我们展示查询吗?我们可能会有一些提示。

由于 MSSql 和 MariaDB 之间存在许多结构差异,可能会有一些查询运行得更快或更慢。

向我们提供您在 MariaDB 中速度较慢的查询之一;我们也许可以加快速度。

【讨论】:

  • 表 tbl_ABC 包含大约 6000000 条记录。该表的所有列都将被引用。只需将数据复制到临时表中需要 36 秒。现在这个临时表包含订单详细信息,我们需要参考每个订单的最新状态。所以另一个需要 30 秒的查询是CREATE Temporary Table DPOD AS Select MAX(SerialNo),OrderNo from tmp_DEF a Inner join tmp_ABC b on a.OrderNo=b.OrderNo and b.RefNo=0 group by b.OrderNo。注意 tmp_DEF 包含大约 1000k 记录。这些临时表在与其他表连接的最终查询中引用。 O/P 在 16 秒内出来
  • 使用临时表而不是组合查询——这会导致额外的工作。查看我添加的标签。
  • 谢谢瑞克。奇怪的删除临时表确实提高了性能。但是,我仍然必须使用组明智的最大查询来维护该临时表。如果我将其保留在最终选择中,则会降低性能。再次感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2015-01-02
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 2021-09-28
  • 2021-10-21
相关资源
最近更新 更多