繁体   English   中英

从 MySQL 5.7 迁移到 MARIADB 10.6 后查询慢。 执行计划指标问题

[英]Slow query after migrating from MySQL 5.7 to MARIADB 10.6. Execution plan index problem

我们希望将 LAMP 服务器从 MySQL 5.7 迁移到 MariaDB 10.6。 我们克隆了服务器,安装了 MariaDB 并迁移了数据库。 我期待 SQL 查询的速度有所提高,但令我惊讶的是,我们的应用程序使用 MariaDB 时速度较慢。 我正在尝试分析一些查询,我向您展示一个具体案例。

我们有一个在许多其他查询中使用的 VIEW,如下所示:

ALTER ALGORITHM = MERGE DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `GT_VWCalendariProfessionalInc` AS
   SELECT cpInc.prof, cpInc.start_date, cpInc.end_date
   FROM GT_CalendariProfessional cpInc
   JOIN CTR_Motius ON cpInc.colA = CTR_Motius.colA
   WHERE cpInc.necessitat IS NULL AND ...

cpInc 表中的关键索引:ix_necessitat (column necessitat), ix_professional (column prof), ix_outerjoin_nec_dates (columns necessitat, start_date, end_date)

使用 MySQL 的外部查询视图比使用 MariaDB 更快。 查询是这样的:

SELECT kal.prof, kal.start_date, kal.end_date
FROM GT_CalendariProfessional kal
LEFT JOIN GT_VWCalendariProfessionalInc AS cpInc ON cpInc.prof = kal.prof AND kal.start_date < cpInc.end_date AND cpInc.start_date < kal.end_date
WHERE kal.prof=3143 AND kal.start_date BETWEEN '2021-01-01 00:00' AND '2022-01-01 00:00'

通过 EXPLAIN,我看到 MariaDB 使用的索引效率低下(ix_professional)。 我不能在视图中强制索引,因为我们在具有不同执行计划的其他查询中使用视图,并且这里的索引效率低下可能是其他查询中最好的。

MySQL(快速)的执行计划: MySQL的执行计划(快速)

MariaDB的执行计划(慢): MariaDB 的执行计划(慢)

通常,使用 MariaDB 的许多查询比使用 MySQL 的查询要慢

首先,让我们添加这些索引; 他们可能会加快这两个版本:

kal:  INDEX(prof, start_date,  end_date)
cpInc:  INDEX(prof, end_date, start_date)
cpInc:  INDEX(prof, start_date, end_date)

并删除仅(prof)上的当前索引

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM