MySQL表结构,我需要一个主键吗?

时间:2015-09-26 07:11:14

标签: mysql

我正在使用Innodb在MySQL中创建一个表。该表将包含来自多个位置的测量值。大致应该存储的数据是:

  • monitor_id - 监视器的ID(已编入索引)
  • 时间 - 测量时间,以秒为单位的分辨率(已编入索引)
  • 值 - 当前值

随着时间的推移,每天可能会有数百万个新行。

我的问题是:

  1. 我需要主键吗?为了我的应用,我不需要PK,但数据库可能?如果是这样,使用BigInt是不是一个坏主意?

  2. 将时间存储为MySQL DateTime是一个坏主意吗?或者我应该使用整数来存储unix_timestamp?从长远来看,这真的很重要吗?此列将被编入索引。

2 个答案:

答案 0 :(得分:0)

  1. 是的。最好有一些身份证作为PK。自动增量(BigInt没问题)
  2. Int对​​于高负载更好。存储(& index)的数据要少得多,但app中的逻辑要多(不在查询中)。

答案 1 :(得分:0)

  1. 您应该使用主键。没有理由避免使用主键
  2. Doc

      

    表的主键表示列或列集   您在最重要的查询中使用的。它有一个相关的索引,   用于快速查询性能。从NOT查询性能优势   NULL优化,因为它不能包含任何NULL值。随着   InnoDB存储引擎,表数据是物理组织的   基于主键列或的超快速查找和排序   列。

    1. 如果要存储特定值,则应使用日期时间字段,否则应使用时间戳。例如,您希望将来更新记录时其数据类型应该是时间戳,因为时间戳会自动更改