私はテーブルを持っています:
CREATE TABLE `p` (
`id` bigint(20) unsigned NOT NULL,
`rtime` datetime NOT NULL,
`d` int(10) NOT NULL,
`n` int(10) NOT NULL,
PRIMARY KEY (`rtime`,`id`,`d`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
そして私は質問があります:
select id, d, sum(n) from p where rtime between '2012-08-25' and date(now()) group by id, d;
私は小さなテーブル(2レコード)でこのクエリについてexplainを実行していますが、PKを使用することを通知します。
id | select_type | table | type | possible_keys key | key | key_len | ref | rows | Extra
1 | SIMPLE | p | range | PRIMARY | PRIMARY | 8 | NULL | 1 | Using where; Using temporary; Using filesort
しかし、同じテーブルで同じクエリを使用すると、今回は巨大な(3億5000万レコード)だけですが、すべてのレコードを調べてキーを無視することを好みます
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | p | ALL | PRIMARY | NULL | NULL | NULL | 355465280 | Using where; Using temporary; Using filesort
明らかに、これは非常に遅いです..誰かが助けることができますか?
編集:この単純なクエリにもかなりの時間がかかります:
select count(*) from propagation_delay where rtime > '2012-08-28';