首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >长查询执行- SSP数据表

长查询执行- SSP数据表
EN

Stack Overflow用户
提问于 2020-08-26 16:51:02
回答 1查看 38关注 0票数 0

我在SSP Class中使用Datables。我对结果2000行进行了查询。但当我尝试运行查询时,我得到了错误500/504错误(如果我有504表没有加载),我在MariadDB 10.2上使用OVH CloudDB,在服务器上我有php 7.2,我的joinQuery看起来像这样:

代码语言:javascript
复制
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

代码语言:javascript
复制
p.platform_id = '.$platformID.' AND g.game_status = 1

和groupBy

代码语言:javascript
复制
gp.game_id

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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可能是无效的(除非其他一切都依赖于它)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63593984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档