好的,这里是一个查询,我现在正在一个拥有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