兄弟们,MySQL三表关联查询优化,求救

发布于 2022-09-12 13:08:51 字数 645 浏览 21 评论 0

我有3张表,分别是物流进出的表(stock_flow)、用户表(user)、商品表(product)。
现在需要关联查询 获取每个用户进出库了什么商品。

stock_flow表结构
id 主键
uid 用户ID
productID 商品ID

user表结构
id 主键
username 姓名

product表结构
id 主键
title 产品名

我自己写的SQL语句

SELECT
    a.*,
    b.title,
    c.username
FROM
    (select * from stock_flow GROUP BY uid,productID) a
     JOIN product b ON a.productID = b.id
     left join user c ON a.uid = c.id
     order by a.uid ASC

这样基本结果就是我要的
然后explain了一下
product表 Extra是 Using temporary; Using filesort
user表 Extra是 Using where; Using join buffer (Block Nested Loop)

现在就不清楚怎么优化,望赐教!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小嗲 2022-09-19 13:08:51

为什么不把title和username写入stock_flow啊,这样就不需要连表了

不改表的话,我感觉直接连表就行了啊

alter table stock_flow add index uid_pid (uid, productID);

SELECT a.*,
    b.title,
    c.username
from stock_flow a,product b,user c where a.productID = b.id and a.uid = c.id order by a.uid ASC;
紙鸢 2022-09-19 13:08:51

你这个要一次性全部出来吗?不需要加limit吗 如果是统计的话可以放到后台跑 或者可以适当拆分一下sql

半步萧音过轻尘 2022-09-19 13:08:51

表user和product数据量如果不大,可以考虑缓存

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文