如何解决长查询执行-SSP数据表
我将Datables与SSP Class一起使用。而且我有结果2000行的查询。 但是,当我尝试运行查询时,出现错误500/504错误(如果没有加载504表) 我将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
在哪里
p.platform_id = '.$platformID.' AND g.game_status = 1
和groupBy
gp.game_id
有什么方法可以优化此查询?
我是否注定要失败,还是应该使用其他SSP类?
解决方法
除非您确实希望丢失“正确的”表,否则不要使用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
可能无效(除非其他所有内容都取决于它)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。