Mysql 在Plesk与本地PC上的MariaDB慢速查询
我有下面的查询,我很欣赏它可能写得不好,但在我的本地PC上,使用Xampp和MariaDB,它的执行时间为0.1719秒,这大约是我希望的速度 但是,在使用Plesk和MariaDB的开发服务器上,使用相同数据的相同查询需要12秒钟以上。显然没有用 也许可以修改查询以使其更好,但是有人能解释为什么会有性能差异吗?该服务器是一个VPS,它不缺少资源-它不是实时的,因此使用率几乎没有,但此查询仍需要12秒以上的时间 查询: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
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
快。但是如果你得到不想要的重复,改变它