我有一个数据库,其中事件存储时间戳,这是非常巨大的。数据库使用3个密钥,其中一个是时间戳" t"。
表定义:
id | bigint(20) AI PK
id_para | int(10) UN
t | int(11) UN
t_ms | smallint(6) UN
t_ns | bigint(20) UN PK
id_inst | smallint(6)
value | varchar(255)
isanchor| tinyint(4) UN
如上所述,引擎是MyISAM,我正在使用mysql5.6。
当我想在某个时间戳之后获得每个事件时,我使用
SELECT * FROM edl.data_inc WHERE t > '1424685000';
说明它检查大约400k行并使用where。它应该使用索引,就像使用
一样SELECT t FROM edl.data_inc WHERE t > '1424685000';
解释显示它检查大约100k行并使用where和index。我让DB使用SELECT *索引的唯一方法是使用
SELECT * FROM edl.data_inc FORCE INDEX(t) WHERE t > '1424685000';
即便如此,它也没有说使用索引,但行数只有100k。将时间戳更改为数字而不是字符串也不会做任何事情。
我做错了什么?提前谢谢!