mysql 5.5到mariadb 10.2.13:select的执行时间增加4000%

问题描述 投票:1回答:2

我面临的一个性能问题在从mysql 5.5迁移到mariadb 10.2.13之后已经体现出来。包括配置在内的两台机器的尺寸是相同的。我们注意到某个选择语句突然需要大约20秒执行而不是0.5秒。数据完全从内存中读取,因为在执行期间无需读取IO。将mariadb上的optimizer_switch更改为mysql5.5的设置并未更改执行计划。

关于mariadb选择的解释如下:20 sec execution time

关于mysql5.5上的select的解释:

0.5 sec execution

select语句:

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上强制执行不同行为的切换?

mysql select mariadb
2个回答
0
投票

更新查询优化器的统计信息(涉及的3个表上的ANALYZE TABLE)修复了此情况下的问题。

现在,SELECT的新执行计划如下所示:

enter image description here


0
投票

这些可能有助于表现:

 link0:  INDEX(pchild, pparent, pname)
 link0:  INDEX(pparent, pname, pchild)
 xuts:   INDEX(pvcurrent, OBJ_TYPE, id)
 acl0:   INDEX(pchild, pparent, pvalue)

你似乎有几个1:1的表;这是真的?如果是这样,为什么?

id的数据类型是?这似乎是一个奇怪的长度:20。

© www.soinside.com 2019 - 2024. All rights reserved.