【发布时间】:2012-02-23 15:47:00
【问题描述】:
我有以下形式的查询:
SELECT * FROM MyTable WHERE Timestamp > [SomeTime] AND Timestamp < [SomeOtherTime]
我想优化这个查询,我正在考虑在时间戳上放置一个索引,但不确定这是否有帮助。理想情况下,我想让时间戳成为聚集索引,但 MySQL 不支持聚集索引,除了主键。
-
MyTable有超过 400 万行。 -
Timestamp实际上是INT类型。 - 一旦插入一行,就永远不会改变。
- 任何给定
Timestamp的行数平均约为 20,但可能高达 200。 - 新插入的行的
Timestamp大于大多数现有行,但可能小于某些最近的行。
Timestamp 上的索引能否帮助我优化此查询?
【问题讨论】:
-
即使在 MSSQL 中,如果您在非唯一列上创建聚集索引,它也会在幕后使其唯一。当然,索引将有助于选择但会减慢插入速度,并且索引会占用磁盘空间。但这听起来像是你愿意接受的交易。将索引放在桌子上并测试。索引用于 > 和 <.>
-
这张表有聚集索引吗?
-
@BalamBalam 我实际上是在为上述类型的查询设计一个数据库,所以我无法测试性能。
-
@ypercube MySQL 不支持聚集索引,除了主键,默认是聚集的。
-
其实没有。 InnoDB 支持每个表使用一个聚集键,
PRIMARY KEY或UNIQUE KEY。如果您还没有定义任何这些,它将成为一个“卧底”(使用 6 字节 INT,如果我没记错的话)。
标签: mysql optimization indexing timestamp