我有3個表:修復SQL查詢,使其變得更有效率
mobile_users
- 與id
,phone_type
,...
2 + 3。 iphone_purchases
和android_purchases
- 與id
,status
,user_id
,..
我試圖讓所有誰做2名或購買更多的用戶。 成功購買確定status > 0
。 另外,我打算在同一查詢中獲取mobile_users
表中的用戶總數。
這是我想出了查詢:
SELECT COUNT(*) AS `users`,
(SELECT COUNT(*)
FROM `mobile_users`
) AS `total`
FROM `mobile_users`
WHERE `mobile_users`.`phone_type` = 'iphone'
AND (SELECT COUNT(*)
FROM (SELECT `status`,
`user_id`
FROM `iphone_purchases`
UNION
SELECT `status`,
`user_id`
FROM `android_purchases`
) AS `purchase_list`
WHERE `purchase_list`.`status` > 0
AND `purchase_list`.`user_id` = `mobile_users`.`id`
) >= 2
這是非常慢的,我必須找到一個方法來改善它。 任何幫助,將不勝感激!
編輯: 另外,你應該考慮到我在PHP中使用子查詢構建這個查詢。 我在WHERE語句中使用更多條件構建它。
爲什麼要將iphone/android存儲在單獨的表中? –
選擇擁有2個或更多iphone + android購買的iphone用戶總數,並在用戶總數旁邊顯示此數字.... iPhone用戶甚至可以出現在android_purchases數據庫中嗎? – JustinDanielson
**您需要向我們展示表格和索引定義**以及每個表格的行數。也許你的表格定義不好。也許索引沒有正確創建。也許你沒有一個你認爲你做過的那個專欄的索引。沒有看到表和索引定義,我們不能說。我們還需要行計數,因爲這會大大影響查詢優化。如果你知道如何做一個'EXPLAIN'或者得到一個執行計劃,那就把結果也放在問題中。 –