我可以将主键设置为精确到秒的时间戳。但仅当插入新行至少相隔 1 秒时,它才能按预期工作。我可以将分辨率提高到微秒,但我想知道它是否过度杀伤和减慢速度。
我想要时间戳,因为它们很容易按时排序,但我不关心超过一秒的处方。
生成它们的好方法是什么?
我可以将主键设置为精确到秒的时间戳。但仅当插入新行至少相隔 1 秒时,它才能按预期工作。我可以将分辨率提高到微秒,但我想知道它是否过度杀伤和减慢速度。
我想要时间戳,因为它们很容易按时排序,但我不关心超过一秒的处方。
生成它们的好方法是什么?
这完全取决于您希望处理的查询。
您实际上可以同时使用它们TIMESTAMP
和一些代理主键;像往常一样,后者将是 auto_incremented,对于某些排序查询,前者也可以被索引:
CREATE TABLE sometable (
sometable_id INT NOT NULL AUTO_INCREMENT,
...
ts TIMESTAMP,
PRIMARY KEY (sometable_id),
KEY (ts)
);
...或者您可以完全删除代理键而无需PRIMARY KEY
-w 使用单个INDEX
覆盖TIMESTAMP
列(请记住,INDEX
!= UNIQUE
)。
不过,我会使用第一种方法;它更加灵活和可扩展。
如果您希望 MySQL 自动生成时间戳,您可以使用默认值定义时间戳列,同时仍使用 AUTO INCREMENT 数字作为主键:
create temporary table tbl (
id int auto_increment primary key,
ts timestamp default current_timestamp
-- other columns follow...
);
要插入新数据,只需省略id
and的值ts
:
insert into tbl values ();
select * from tbl;
+----+---------------------+
| id | ts |
+----+---------------------+
| 1 | 2012-09-20 18:24:21 |
+----+---------------------+
如果您经常搜索或排序,请务必在时间戳列上定义索引...