60万を超えるレコードで実行されるmysqlSUMクエリがあります。私が今していることはこんな感じです
SELECT SUM (payment)
FROM payment_table
WHERE
payment_date BETWEEN ... AND ...
AND
payment_status = 'paid'
レコードセットを減らすためにクエリをこの形式に変更しましたが、それでもほぼ同じ時間がかかります。
SELECT SUM(Payments)
FROM (
SELECT payment AS Payments FROM payment_table WHERE
payment_date BETWEEN DATE_FORMAT(NOW(), '2012-2-01') AND DATE_FORMAT(LAST_DAY(DATE_FORMAT(NOW(), '2012-2-01')), '%Y-%m-%d')
AND
payment_status = 'paid'
) AS tmp_table
この合計クエリを最適化する方法はありますか。編集:
これは、クエリがで実行されたときの結果ですEXPLAIN
` (
IDに挿入,
select_type,
テーブル,
タイプ,
possible_keyskeykey_len ref rows,
Extra` )values( '1'、'SIMPLE'、'lps'、'index_merge'、'assigned_user_id、scheduled_payment_date、payment_status、deleted'、'deleted、assigned_user_id、payment_status',
、'2,109,303'、NULL、 '23347'、'intersect(deleted、assigned_user_id、payment_status);を使用して');,
,
,