私は1100000レコードを持つテーブルuser_notificationsを持っていますが、これを下のクエリで実行する必要がありますが、フェッチ時間を改善するために何ができるのですか?このSQLクエリをより速くするにはどうすればよいですか?
SELECT `user_notifications`.`user_id`
FROM `user_notifications`
WHERE `user_notifications`.`notification_template_id` = 175
AND (DATE(sent_at) >= DATE_SUB(CURDATE(), INTERVAL 4 day))
AND `user_notifications`.`user_id` IN (
1203, 1282, 1499, 2244, 2575, 2697, 2828, 2900, 3085, 3989,
5264, 5314, 5368, 5452, 5603, 6133, 6498..
)
IN
ブロックのユーザーIDは1kになることがあります。
私はuser_id
とnotification_template_id
の欄にuser_notification
という表の索引を付けました。
1 + 100万レコードの 'user_id'値を1000個比較すると、MySQLが必要に応じてインデックスを使用していても、時間がかかることになります。どのくらいの年齢ですか? –
@TimBiegeleisen 2-5 minutes avg – Prem
user_idとnotification_template_idに別々のインデックスを作成しましたか、どちらか一方に別のインデックスを作成しましたか?後者を試してみてください。 – wumpz