我想从MySQL获取一些用户统计信息。喜欢的东西:如何优化多个子查询?
- 10%的用户购买了百事可乐
- 20%是女人
- 40%是在美国
的第一步是获取所有用户的列表已经从百事买了东西制造商。
此查询在1秒内运行良好,并返回用户标识列表。
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秒。有什么办法可以优化吗?
也许使用WHEREs,JOINs或更改mysql RAM配置?
您的表格是否编入索引? – vaso123
谢谢@lolka_bolka,我在NAME和GENDER字段创建了索引,现在需要2秒。 – anderlaini
我很难相信名称和性别的索引会有帮助,因为它们不包含在任何过滤参数中。查询是否发生了与您发布的查询不同的查询? –