0

我可以将主键设置为精确到秒的时间戳。但仅当插入新行至少相隔 1 秒时,它才能按预期工作。我可以将分辨率提高到微秒,但我想知道它是否过度杀伤和减慢速度。

我想要时间戳,因为它们很容易按时排序,但我不关心超过一秒的处方。

生成它们的好方法是什么?

4

2 回答 2

2

这完全取决于您希望处理的查询。

您实际上可以同时使用它们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)。

不过,我会使用第一种方法;它更加灵活和可扩展。

于 2012-09-20T16:24:10.153 回答
2

如果您希望 MySQL 自动生成时间戳,您可以使用默认值定义时间戳列,同时仍使用 AUTO INCREMENT 数字作为主键:

create temporary table tbl (
    id int auto_increment primary key,
    ts timestamp default current_timestamp
    -- other columns follow...
);

要插入新数据,只需省略idand的值ts

insert into tbl values ();

select * from tbl;
+----+---------------------+
| id | ts                  |
+----+---------------------+
|  1 | 2012-09-20 18:24:21 |
+----+---------------------+

如果您经常搜索或排序,请务必在时间戳列上定义索引...

于 2012-09-20T16:27:41.497 回答