如何让这个SQL查询更快?

Pre*_*rem 2 mysql sql query-performance

我有一个表user_notifications有1100000条记录,我必须运行以下查询,但完成查询需要3分钟以上才能改善获取时间.

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..
)
Run Code Online (Sandbox Code Playgroud)

IN块中的用户ID 有时高达1k.

为了优化我已经索引user_id和表中的notification_template_iduser_notification.

在此输入图像描述

Dan*_*ell 7

Big IN()列表本质上很慢.创建一个带索引的临时表,并将IN()列表中的值放入该临时表中,然后您将获得索引连接而非巨型IN()列表的强大功能.