Ok、ここでは、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サーバをチョーク...それは何
がある - それは単に数を引きます登録済みの新規ユーザーのうち、少なくとも1つの「完了した」支払いがあり、tm_completedは空ではない(完了した支払いのためにのみ入力されるため)前払いの支払いをする前に - 新しいメンバーであることを意味します(単に借り替えなど)。これは、再払い戻された既存のメンバーと初めて請求された新しいメンバーを区別するための唯一の方法です) 。
ここで、少ないリソースや何かを使用するようにこのクエリを最適化し、自分のmysqlリソースを無駄にしないようにする方法はありますか?
私はこのことをさらに明確にするための情報がありませんか?私は...
EDITを知ってみましょう:
PRIMARY PRIMARY 46757
MEMBER_IDのINDEX 23378 MEMBER_ID
payer_id INDEX 11689 payer_id
をpayment_id:ここはすでにそのテーブル上のインデックスがあります
クーポンIDインデックス1クーポンID
tm_added INDEX 46757 tm_added、tm_completed
tm_completed INDEX 46757をPRODUCT_IDは、
あなたは、検索引数が使用されているフィールドのインデックスを持っていますか – James