Mysql 在Plesk与本地PC上的MariaDB慢速查询

Mysql 在Plesk与本地PC上的MariaDB慢速查询,mysql,xampp,mariadb,plesk,Mysql,Xampp,Mariadb,Plesk,我有下面的查询,我很欣赏它可能写得不好,但在我的本地PC上,使用Xampp和MariaDB,它的执行时间为0.1719秒,这大约是我希望的速度 但是,在使用Plesk和MariaDB的开发服务器上,使用相同数据的相同查询需要12秒钟以上。显然没有用 也许可以修改查询以使其更好,但是有人能解释为什么会有性能差异吗?该服务器是一个VPS,它不缺少资源-它不是实时的,因此使用率几乎没有,但此查询仍需要12秒以上的时间 查询: SELECT m.id AS match_id, e.event AS e

我有下面的查询,我很欣赏它可能写得不好,但在我的本地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'

您确定需要在
左JOIN
ON
子句中使用
和e.player='7138'
,而不是在
WHERE
子句中使用吗

更好的索引

推荐以下综合、覆盖、索引:

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

优化效果不佳。一个常见的技巧是将其转换为
联合体
。这可能适用于您的查询:

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
我选择了
unionall
,因为它比
uniondistinct
快。但是如果你得到不想要的重复,改变它