-1

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

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

为什么第二个查询比第一个多?

4

1 回答 1

4

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

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

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

于 2014-12-30T04:15:14.623 回答