gpt4 book ai didi

mysql - 如何优化我的sql查询

转载 作者:行者123 更新时间:2023-11-28 23:17:24 26 4
gpt4 key购买 nike

我有一个表 user_notification。有一个 cron 命令正在运行,它执行

SELECT * FROM `user_notification` `t` WHERE `t`.`status`=2;

其中状态 1 - Send_fail,2- Queue,3- Success(像这样。)

表中有大约 10 万条记录,这些记录每天都在呈指数增长。此查询花费太多时间。有没有办法优化这个查询?

#Table structure for table `user_notification`

CREATE TABLE `user_notification` (
`id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`notification_id` int(11) NOT NULL,
`notification_title` varchar(256) NOT NULL,
`notification_message` text NOT NULL,
`status` int(1) NOT NULL,
`created` int(11) NOT NULL,
`updated` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `user_notification`
ADD PRIMARY KEY (`id`),
ADD KEY `user_id` (`user_id`),
ADD KEY `notification_id` (`notification_id`);
ALTER TABLE `user_notification`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=94322;
ALTER TABLE `user_notification`
ADD CONSTRAINT `user_notification_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
ADD CONSTRAINT `user_notification_ibfk_2` FOREIGN KEY (`notification_id`) REFERENCES `notification` (`id`);


# Query_time: 0.010663 Lock_time: 0.000045 Rows_sent: 0 Rows_examined: 17294
SET timestamp=1491527264;
SELECT * FROM `user_notification` `t` WHERE `t`.`status`=2;

最佳答案

正如其他人所提到的,在 status 列上创建索引应该会有所帮助。

听起来您将经常在一个越来越大的表中处理相对较小的行子集(即“排队”行)。您可能需要考虑将“排队”的记录放在它们自己的表中,然后在它们的状态变为“成功”或“失败”时将它们移动到历史表中。这样,您只需要从一个相对较小的表中进行查询。当然,此策略涉及额外的删除和插入,因此它可能会导致其他问题,具体取决于您的应用程序的工作方式。

关于mysql - 如何优化我的sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43278480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com