我一直在寻找,但没有看到令人满意的解决方案。有人可以提供帮助..
我有一个简单的查询表,需要很长时间。我使用的是版本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也是如此。
谁能告诉我为什么这么长时间?如果我能提供更多信息,请告诉我。