mysql - MySQL:优化子查询
问题描述
我有这个查询需要进一步优化,因为它需要太多的 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 表似乎没有与其他表连接/相关,这会在所有行之间产生 catesia 产品
如果您想要不同的结果,请不要使用 group by 但 distint 这样您就可以避免不必要的子查询
而且您不需要在子查询上订购
SELECT category
, b.fruit_name
, u.name
, r.count_vote
, r.text_c
FROM Fruits b
INNER JOIN Customers u ON u.customer_id = r.customer_id
INNER JOIN Categories c ON ?????? /Your Categories table seems not joined/related to the others /
INNER JOIN (
SELECT distinct fruit_id, count_vote, text_c, customer_id
FROM Reviews
) r ON b.fruit_id = r.fruit_id
WHERE category = "Fruits";
为了更好地阅读,您应该使用显式连接语法并避免基于逗号分隔的表名称和 where 条件的旧连接语法
推荐阅读
- php - 如何让工作人员在 PHP - Heroku 中持续运行?
- python-3.x - 如何在 apache2 上运行 FastAPI?
- android - 显示警报对话框的 Activity 方法的 Android Mockito 测试
- node.js - 已解决 - 条带克隆客户并在关联账户上创建直接费用
- reactjs - 'ReferenceError: cptable is not defined' 运行 Jest 测试时,生成 excel 工作表的实际代码工作正常
- mysql - MySQL - 具有空字段的 MIN 和 MAX 值
- python-3.x - python3:在没有超级用户权限的情况下附加到自定义 /var/log/mylog
- google-sheets - 如何使用 VLOOKUP 将多个匹配的列返回到 1 列
- javascript - 如何使用 amCharts 将标签放在分层条形图中最高条的顶部?
- node.js - 如何真正杀死 Node.js TCP 服务器并在之后在同一进程中重新启动它