首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用时间戳(或日期时间)作为主键(或聚集索引的一部分)的一部分

使用时间戳(或日期时间)作为主键(或聚集索引的一部分)的一部分
EN

Database Administration用户
提问于 2013-05-31 06:54:33
回答 2查看 5.3K关注 0票数 0

我经常使用以下查询:

代码语言:javascript
复制
SELECT * FROM table WHERE Timestamp > [SomeTime] AND Timestamp < [SomeOtherTime] and publish = 1 and type = 2 order by Timestamp

我想优化这个查询,我正在考虑将时间戳作为聚集索引的主键的一部分,我认为如果时间戳是主键的一部分,表中插入的数据已经按时间戳field.Also顺序写入磁盘--我认为这大大改进了我的查询,但不确定这是否有帮助。

代码语言:javascript
复制
table has 3-4 million+ rows.
timestamp field never changed.
I use mysql 5.6.11

要点是:如果这改进了我的查询,最好使用时间戳( mysql 5.6中的4字节)或日期时间( mysql 5.6中的5字节)?

EN

回答 2

Database Administration用户

发布于 2013-05-31 11:55:27

请考虑以下几点:

  • 这个查询的理想索引是KEY (publish, type, Timestamp)。通过您选择的查询,我得到publishtype的过滤是常见的。
  • 如果上面的内容是正确的,那么插入到表中的数据无论如何也不会按时间戳顺序排列。
  • PRIMARY KEY是唯一的。您确定不允许有两个相同的Timestamp值吗?请记住,分辨率是1秒,因此对于不同的行具有相同的TIMESTMAP值是非常常见的。
  • 我通常喜欢AUTO_INCREMENT列作为PRIMARY KEY (参见使用汽车的原因_InnoDB上的增量列)。我的一般观点是在(publish, type, Timestamp)上使用一个正常的索引。
票数 2
EN

Database Administration用户

发布于 2013-05-31 11:46:29

  1. 为什么不提供表结构和查询解释计划?不是每个人都有水晶球:)
  2. 我认为发布列和类型列没有很好的基数(不同值的数量),因此您没有它们的索引。这就需要以某种方式对列时间戳进行索引。
  3. 如果在时间戳上有索引,则无需在PK中包含此列。
  4. 使用聚集索引的思想,在PK中使用时间戳来实现数据写入顺序模式是很好的,但是它会增加插入查询的响应时间。
  5. 请阅读有关时间戳和日期时间的文章:https://stackoverflow.com/questions/409286/datetime-vs-timestamp
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/43499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档