mysql 5.5 到 mariadb 10.2.13 : 4000% increase in execution time for select

标签 mysql select mariadb

从 mysql 5.5 迁移到 mariadb 10.2.13 后,我遇到了一个性能问题。包括配置在内的两台机器的大小是相同的。我们注意到某个 select 语句突然需要大约 20 秒来执行,而不是 0.5 秒。数据纯粹是从内存中读取的,因为在执行期间要测量的读取 IO 为零。将mariadb上的optimizer_switch改为mysql5.5的设置,执行计划没有改变。

mariadb 上的选择说明如下所示: 20 sec execution time

mysql5.5上select的说明:

0.5 sec execution

选择语句:

SELECT  acmh.OBJ_VERSION,acmh.peannr,acmh.pzsrnr,xuts.ptitle,
        acmh.pcategory,acmh.psalutatio,acmh.plastname,acmh.pfirstname,
        acmh.pcompanyna,syoq.paddress1,syoq.pzip,syoq.pcity,syoq.pphone1,
        syoq.pphone2,syoq.pphone3,syoq.pphone4,syoq.pemail,acmh.piscompany,
        xuts.id
    FROM  catalog1.tr_table_acmh acmh,catalog1.tr_table_syoq syoq,
        catalog1.tr_table_xuts xuts,catalog1.tr_table_wdvi link0,
        catalog1.tr_table_wdvi acl0
    WHERE  acmh.id=syoq.id
      AND  acmh.id=xuts.id
      AND  syoq.id=xuts.id
      AND  xuts.OBJ_TYPE IN (1557)
      AND ( (xuts.id=link0.pchild
       AND  link0.pparent='xkgrrslqkeaaaaendrxa'
       AND  link0.pname='folder')
       and  1 = 1 )
      AND  xuts.pvcurrent=1
      AND  (acl0.pchild=xuts.pacl
       AND  acl0.pparent='xkgrrswxbjaaaaaaabip'
       AND  acl0.pvalue>=20
           )
    order by acmh.plastname asc,
             acmh.pfirstname asc,
             acmh.pcompanyna asc
    LIMIT  10 OFFSET 0;

我是否缺少任何可以在 mariadb 上强制执行不同行为的开关?

最佳答案

更新查询优化器的统计信息(对涉及的 3 个表进行 ANALYZE TABLE)解决了这种情况下的问题。

SELECT 的新执行计划现在看起来像这样:

enter image description here

关于mysql 5.5 到 mariadb 10.2.13 : 4000% increase in execution time for select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48939543/

相关文章:

mysql - 如何将一个简单的数组作为列数据?

mysql - SQL 选择一条记录而不是另一条记录

mariadb - 像跟踪 MongoDB 操作日志一样跟踪 MariaDB 数据库更改

wpf - 从 View 模型中选择数据网格行中的所有复选框

MySQL复制,忽略存储过程

mysql - 使用mysql根据前一行在记录集中设置修改标志

mysql - 标准无歧义格式 [R] MySQL 导入数据

mysql - 在计算用户变量之前,使用 FORCE INDEX 确保表按 GROUP BY 和 ORDER BY 排序

mysql - MySQL SELECT 查询速度慢

mysql - 如何表减表=答案 PHP MYSQL