MySQL在日期上简单慢查询但在char上快速查询

时间:2013-10-28 15:57:56

标签: mysql date

我一直在寻找,但没有看到令人满意的解决方案。有人可以提供帮助..

我有一个简单的查询表,需要很长时间。我使用的是版本5.5.32-0ubuntu0.13.04.1(它实际上是Linux Mint Olivia。我也切换到MariaDB但它似乎没有任何区别。)

我创建了一个测试表来演示:

的MySQL> show create table test;

| test | CREATE TABLE `test` (
`sym` char(5) COLLATE utf8_bin DEFAULT NULL,
`date` date DEFAULT NULL,
`vol` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin |

然后我从另一张表中填充了1100万行。如果我在'sym'上添加一个简单的索引

'SELECT * FROM test WHERE Sym='ORCL';

显示

6467行(0.10秒)

然后我在日期添加一个索引,这需要更长的时间,如:

SELECT * FROM test WHERE Date='2008-10-1';

2488行(12.40秒)

这可疑地接近没有索引的时间,并且在查询期间硬盘驱动器指示灯亮起。

我尝试了USE INDEX甚至FORCE INDEX,但似乎没有效果。

BTW SELECT COUNT(*) FROM test WHERE Date='2008-10-1';

返回

+----------+
| COUNT(*) |
+----------+
| 2488     |
+----------+
1 row in set (0.02 sec)

如果我只是要求日期字段,那么

SELECT date from test where date=20081020;

它在约0.30秒内返回正确的行数,因此它正在使用索引。

EXPLAIN SELECT * FROM test WHERE Date='2008-10-1';

显示(我称之为日期索引'dt')

+------+-------------+---------------+------+---------------+------+---------+-------+------+-------+
| id   | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-------+------+---------------+------+---------+-------+------+-------+
| 1    | SIMPLE | test | ref | dt | dt | 4 | const | 2445 | |
+------+-------------+-------+------+---------------+------+---------+-------+------+-------+

注意Extra列是空白的。 USE INDEX和FORCE INDEX也是如此。

谁能告诉我为什么这么长时间?如果我能提供更多信息,请告诉我。

0 个答案:

没有答案