Вот какие интересные штуки умеет mysql:
читать дальше
mysql> explain select * from cdr where LOGGED_TIME < '2004-10-01 00:00:00';
+-------+-------+-----------------+-----------------+---------+------+------+-------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------+-------+-----------------+-----------------+---------+------+------+-------------+
| cdr | range | cdr_logged_time | cdr_logged_time | 8 | NULL | 2 | Using where |
+-------+-------+-----------------+-----------------+---------+------+------+-------------+
1 row in set (0.02 sec)
mysql> explain select * from cdr where LOGGED_TIME > '2004-10-01 00:00:00';
+-------+------+-----------------+------+---------+------+--------+-------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------+------+-----------------+------+---------+------+--------+-------------+
| cdr | ALL | cdr_logged_time | NULL | NULL | NULL | 327860 | Using where |
+-------+------+-----------------+------+---------+------+--------+-------------+
1 row in set (0.00 sec)
mysql> select count(*) from cdr where LOGGED_TIME < '2004-10-04 10:00:00';
+----------+
| count(*) |
+----------+
| 129001 |
+----------+
1 row in set (0.20 sec)
mysql> select count(*) from cdr where LOGGED_TIME > '2004-10-04 10:00:00';
+----------+
| count(*) |
+----------+
| 198857 |
+----------+
1 row in set (4.52 sec)
mysql> select count(*) from cdr where not (LOGGED_TIME < '2004-10-04 10:00:00');
+----------+
| count(*) |
+----------+
| 199031 |
+----------+
1 row in set (0.50 sec)
В переводе на человеческий язык: в запросе "найди мне запими, в которых время больше, чем..." индекс не используется. В запросе "найди мне записи, в которых время меньше, чем..." - используется. Вследствие чего, один запрос отрабатывает примерно в 10 раз быстрее, чем другой.
При этом, в "найди записи, в которых не (время меньше чем ...)" - индекс используется.
Я офигеваль.
mysql 4.0.16...