【发布时间】:2021-04-15 15:58:27
【问题描述】:
我有这个查询需要进一步优化,因为它需要太多的 cpu 时间,而且我似乎找不到任何其他方法来更有效地编写它。有没有其他方法可以在不改变表格的情况下编写这个?
SELECT category, b.fruit_name, u.name
, r.count_vote, r.text_c
FROM Fruits b, Customers u
, Categories c
, (SELECT * FROM
(SELECT *
FROM Reviews
ORDER BY fruit_id, count_vote DESC, r_id
) a
GROUP BY fruit_id
) r
WHERE b.fruit_id = r.fruit_id
AND u.customer_id = r.customer_id
AND category = "Fruits";
【问题讨论】:
-
您的 Categories 表似乎没有与其他表连接/相关 .. 您没有该表的 where 条件 .. 您应该将相关表架构添加一个适当的数据样本和预期结果
-
不要使用逗号分隔的连接。它们很容易出错,这就是 1992 年在标准 SQL 中引入显式连接的原因。这甚至在 MySQL 被发明之前。你应该放弃你的书/老师/教程来教授这种古老的语法。
-
类别表与其他类别表的关系如何?去水果桌?但为什么水果会属于与“水果”不同的类别呢?另一方面,客户不属于名为“水果”的类别。这看起来有点奇怪。也许您只是过度简化了示例查询?
-
@ThorstenKettner 是的,我确实过度简化了那些不是实际的表和字段,而是一个示例
-
虽然是真的,但是是什么让您相信您的查询不是最理想的?您是否使用过任何分析技术?参考aman-garg.medium.com/… 如果你知道为什么你的查询是次优的,你也会知道如何解决它。
标签: mysql query-optimization groupwise-maximum