私はテーブルuser_notificationを持っています。 Send_fail、2-キュー、3-成功(このような)SQLクエリを最適化する方法
テーブルで一日指数関数的に増加している〜100Kレコードの周りにある -
SELECT * FROM `user_notification` `t` WHERE `t`.`status`=2;
ステータス1が
を実行するcronコマンドの実行があります日ごとに。このクエリは時間がかかりすぎています。このクエリを最適化する方法はありますか?
#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;
クエリの実行には0.01秒かかっています。これは悪いことではありませんが、依然として列ステータスで索引を作成できます。 –
@Manishなぜあなたのクエリに 'tを使用していますか?SELECT * FROM user_notification t WHERE t.status = 2;'私は別名を使う必要はないと思う。 – user3441151
@ user3441151 。 。エイリアスは一般的には良い考えであり、落胆してはいけません。 –