长时间查询执行 - SSP 数据表

Long query execution - SSP Datatables

我用Datables with SSP Class。我查询结果为 2000 行。 但是当我尝试 运行 查询时,我得到错误 500/504 错误(如果我有 504 table 没有加载) 我将 OVH CloudDB 与 MariadDB 10.2 一起使用,在服务器上我有 php 7.2 我的 joinQuery 看起来像:

FROM data_platforms p
LEFT JOIN game_platforms gp ON gp.platform_id = p.platform_id
LEFT JOIN games g ON g.game_id = gp.game_id
LEFT JOIN tastings t ON t.tasting_game_id = g.game_id
LEFT JOIN notes n ON n.note_game_id = g.game_id
LEFT JOIN ratings r ON r.rating_game_id = g.game_id
LEFT JOIN images i ON i.image_type_id = g.game_id AND (i.image_type = 2 || i.image_type = 1)
LEFT JOIN game_generes gg ON gg.game_id = g.game_id
LEFT JOIN generes gen ON gen.id = gg.genere_id

还有 extraWhere

p.platform_id = '.$platformID.' AND g.game_status = 1

和groupBy

gp.game_id

有什么方法可以优化这个查询吗?

在这一点上我注定要失败,还是我应该使用不同的 SSP class?

不要使用 LEFT 除非你真的希望 'right' table 丢失。

不要“over-normalize”。例如,我希望 genre 只是一个列,而不是 many-to-many 映射 table 加上一个流派 table.

(i.image_type = 2 || i.image_type = 1) --> i.image_type IN (1,2) 优化器可能更好。

查看此内容可能会改善 many-to-many table 索引:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table

请提供 SHOW CREATE TABLE 以便我们检查其他索引,例如 platform_id

让我们看看整个查询,加上 EXPLAIN SELECT ...GROUP BY gp.game_id 可能无效(除非其他一切都依赖于它)。