我正在尝试从mysql获取一些用户统计信息。类似的东西:
第一步是获取所有用户从百事可乐制造商处购买东西的清单。
此查询在不到1秒的时间内运行良好,并返回用户ID列表。
SELECT DISTINCT idUser FROM checkout_item INNER JOIN (
SELECT id FROM product WHERE manufacturer = "pepsi"
) AS chkItem ON chkItem.id = checkout_item.idProduct
现在我使用此列表来获取信息。刚刚在上面添加了一个查询:
SELECT
name, gender
FROM users INNER JOIN(
SELECT DISTINCT idUser FROM checkout_item INNER JOIN ( //
SELECT id FROM product WHERE manufacturer = "pepsi" // same query above
) AS chkItem ON chkItem.id = checkout_item.idProduct //
) AS usr ON usr.idUser = users.id
此查询正常,但需要23秒。有没有办法优化这个?
也许使用WHERE,JOIN或更改mysql RAM配置?
答案 0 :(得分:1)
这是您第一次查询的重写。也许你可以弄清楚其余部分。
SELECT DISTINCT idUser
FROM checkout_item i
JOIN product p
ON p.id = i.idproduct
WHERE p.manufacturer = 'pepsi'
答案 1 :(得分:0)
试试这个: 选择名称,性别 来自checkout_item c INNER JOIN(从产品WHERE manufacturer =“pepsi”中选择ID)p ON p.id = C.idProduct INNER JOIN用户u on C.idUser = u.Id
还要考虑在checkout_item字段idProduct
上添加索引答案 2 :(得分:0)
以下内容应该为您提供idUsers的总数,以及女性idUsers的总数(显然我不知道您使用什么作为性别标志,所以我只使用'f')。
SELECT COUNT(DISTINCT idUser) AS Total,
COUNT(DISTINCT CASE WHEN gender = 'f' then idUser else null end) AS women
FROM checkout_item ci
inner join product p
on p.id=ci.idProduct
WHERE p.manufacturer = 'pepsi'
从那里获得你需要的数据应该是基本的数学。
通常我不建议使用'DISTINCT',但是对于你的数据不太了解,这是制作有用的东西的快捷方式。
希望有所帮助!