我在SSP Class中使用Datables。我对结果2000行进行了查询。但当我尝试运行查询时,我得到了错误500/504错误(如果我有504表没有加载),我在MariadDB 10.2上使用OVH CloudDB,在服务器上我有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类?
发布于 2020-08-27 07:53:56
不要使用LEFT,除非你真的希望“正确的”表会丢失。
不要“过度规范化”。例如,我希望genre仅仅是一个列,而不是一个多对多的映射表加上一个类型表。
(i.image_type = 2 || i.image_type = 1) --> i.image_type IN (1,2)可能会更好地优化。
有关多对多表索引的可能改进,请参阅以下内容: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可能是无效的(除非其他一切都依赖于它)。
https://stackoverflow.com/questions/63593984
复制相似问题