我想從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
我很難相信名稱和性別的索引會有幫助,因爲它們不包含在任何過濾參數中。查詢是否發生了與您發佈的查詢不同的查詢? –