好的,這裏是一個查詢,我現在正在一個擁有45,000條記錄並且大小爲65MB的表上運行......並且正在變得越來越大(所以我必須考慮未來的表現,以及在這裏)的:在mySQL中優化嵌入式SELECT查詢
SELECT count(payment_id) as signup_count, sum(amount) as signup_amount
FROM payments p
WHERE tm_completed BETWEEN '2009-05-01' AND '2009-05-30'
AND completed > 0
AND tm_completed IS NOT NULL
AND member_id NOT IN (SELECT p2.member_id FROM payments p2 WHERE p2.completed=1 AND p2.tm_completed < '2009-05-01' AND p2.tm_completed IS NOT NULL GROUP BY p2.member_id)
正如你可能會或可能不會想象 - 它扼流圈MySQL服務器癱瘓......
它所做的是 - 它只是拉數的新用戶註冊,至少有一個「已完成」的付款,tm_completed不是空的(因爲它只填充已完成的付款),以及(嵌入式選擇)成員從未擁有過「com完成「付款 - 這意味着他是一個新成員(僅僅是因爲系統確實會重新投入,而且這是區分剛剛獲得回扣的現有成員和第一次收到新成員的新成員之間唯一的區別) 。
現在,是否有任何可能的方式來優化此查詢使用更少的資源或什麼,並停止採取我的MySQL資源跪下......?
我是否缺少任何信息以進一步澄清此問題?讓我知道...
編輯:
這裏有指標已經在該表:
PRIMARY PRIMARY 46757 payment_id
member_id INDEX 23378 member_id
payer_id INDEX 11689 payer_id
coupon_id INDEX 1 coupon_id
tm_added INDEX 46757 tm_added,PRODUCT_ID
tm_completed INDEX 46757 tm_completed,PRODUCT_ID
你對其中正在使用搜索ARGS領域指標 – James 2009-05-30 05:20:06