日期之间的Mysql选择查询需要更多的执行时间

时间:2014-12-30 03:59:06

标签: mysql sql sqldatetime

在我的测试表中有100万行,列id是自动生成的数字,从1到100万,id列是唯一索引,timestore列存储插入时间,在id范围之间执行select查询Ex:

select * from test where id > 345673 and id < 453267

执行时间 - 0.379s

如果在两个日期之间执行选择查询

select * from test where timestore between '2014-12-28 16:59:50' and '2014-12-28 17:1:50'

执行时间 - 1.478s

为什么第二个查询需要多于第一个?

1 个答案:

答案 0 :(得分:4)

假设您的表仅由id列索引,而不是按日期索引。当您的第一个查询执行时,它可以直接跳转到ID 345673的索引,跳过它下面的所有内容。执行第二个查询时,查询必须读取表中的所有百万行,因为它没有编入索引。

我建议您按顺序使用timestore和ID字段创建聚簇索引。还要确保在使用WHERE语句时以与聚簇索引相同的顺序使用timestore和ID子句,以确保编译器使用该索引。

您还可以单独从timestore-id聚集索引创建非聚集索引,仅用于timestore或ID。

相关问题