在我的测试表中有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
为什么第二个查询需要多于第一个?
答案 0 :(得分:4)
假设您的表仅由id列索引,而不是按日期索引。当您的第一个查询执行时,它可以直接跳转到ID 345673的索引,跳过它下面的所有内容。执行第二个查询时,查询必须读取表中的所有百万行,因为它没有编入索引。
我建议您按顺序使用timestore和ID字段创建聚簇索引。还要确保在使用WHERE语句时以与聚簇索引相同的顺序使用timestore和ID子句,以确保编译器使用该索引。
您还可以单独从timestore-id聚集索引创建非聚集索引,仅用于timestore或ID。