Plesk 与本地 PC 上的 MariaDB 慢查询

Posted

技术标签:

【中文标题】Plesk 与本地 PC 上的 MariaDB 慢查询【英文标题】:MariaDB Slow Query on Plesk vs local PC 【发布时间】:2021-01-02 06:40:47 【问题描述】:

我有以下查询,我很欣赏它可能写得不好,但在我的本地 PC 上使用 Xampp 和 MariaDB,它在 0.1719 秒内执行,这大约是我希望的速度。

但是,在我的使用 Plesk 和 MariaDB 的开发服务器上,使用相同数据的相同查询需要 12 秒以上。显然是没有用的。

也许可以修改查询以使其更好,但是有人可以解释为什么会出现性能差异吗?服务器是一个 VPS,它不缺资源——它不是实时的,所以几乎没有使用,但这个查询仍然需要 12 多秒。

查询:

SELECT  m.id AS match_id, e.event AS event1
    FROM  matches m
    JOIN  competitions co  ON co.id = m.competition
    JOIN  clubs h  ON h.id = m.hometeam
    JOIN  clubs a  ON a.id = m.awayteam
    LEFT JOIN  match_events e  ON e.match = m.id
      AND  e.player = '7138'
    WHERE  (m.hometeam = '1'
              OR  m.awayteam = '1'
           )
      AND  m.season = '121'

【问题讨论】:

【参考方案1】:

您确定在LEFT JOINON 子句中需要AND e.player = '7138',而不是在WHERE 子句中吗?

更好的索引

推荐这些复合、覆盖、索引:

m:  (season, awayteam, hometeam, competition, id)
e:  (player, match, event)

避免或

OR 优化不佳。一个常见的技巧是把它变成UNION。这可能适用于您的查询:

SELECT ...
    FROM matches JOIN ...
    WHERE m.season = 121
      AND m.hometeam = 1
UNION ALL
SELECT ...
    FROM matches JOIN ...
    WHERE m.season = 121
      AND m.awayteam = 1

并且有这两个索引:

INDEX(season, hometeam)  -- will be used by one part of the UNION
INDEX(season, awayteam)  -- will be used by the other

我选择了UNION ALL,因为它比UNION DISTINCT 快。但是如果你得到了不需要的重复,那就改变它。

【讨论】:

以上是关于Plesk 与本地 PC 上的 MariaDB 慢查询的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB 上的 MySQL 查询非常慢

从远程 pc 在 C# 中生成 s-s-rS 2008 R2 报告比从本地 pc 慢

与 XAMPP 相比,MariaDB Docker 容器中的 INSERT SQL 查询非常慢

带有 plesk 的 linux Ubuntu 上的多个 svn 存储库

Plesk服务器上的所有邮件帐户用户/传递

Plesk:访问外部公共文件夹