Plesk与本地PC上的MariaDB慢查询

问题描述

我有下面的查询,我很欣赏它的编写方式,但我不满意,但是在装有Xampp和MariaDB的本地PC上,它的执行时间为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'

解决方法

确定要在AND e.player = '7138'的{​​{1}}子句中使用ON而不是在LEFT JOIN子句中吗?

更好的索引编制

推荐这些综合,覆盖,索引:

WHERE

避免OR

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快。但是,如果您得到了不必要的欺骗,请进行更改。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...