如何按性能记录日期时间以进行分析?

时间:2015-04-19 11:39:11

标签: mysql date

为了分析日期和时间我正在创建一个MySQL表,我想保留时间信息。一些示例分析将是:

  • 每天/每周/每月/每年的项目
  • 每个工作日的项目
  • 每小时物品

现在关于性能,我应该在我的数据表中记录什么方式:

  1. 日期类型:Unix时间戳?
  2. 日期类型:datetime?
  3. 或将日期信息分别保存在一行中,例如yearmonthday位于不同的字段中?
  4. 例如,如果我按工作日进行分析,那么最后一个会很方便;我不必在MySQL上执行WEEKDAY(item.date),但只能使用WHERE item.weekday = :w

2 个答案:

答案 0 :(得分:2)

经验法则是:存储应存储的内容,不要进行性能调整,直到遇到瓶颈。如果您将日期存储为单独的字段,那么您最终会偶然发现数据库中需要此日期作为一个整体的情况(例如,更新特定时间范围内的查询),这就像地狱一样 - 条件{ {1}}会尽可能地巨大。

您应该将日期保留为日期类型。这将为您提供最大的灵活性(最有可能)查询可读性,并将保留您的所有机会。我唯一能推荐的是在下一栏中存储分为年/月/日的相同日期 - 当然,这会使您的数据库膨胀,并且在更新方案时需要格外小心,但这将允许您使用任何来源的变体您的查询中的数据。

答案 1 :(得分:2)

根据您的使用情况,您希望使用原生datetime格式。当主要操作是(1)排序时,Unix格式最有用; (2)以秒/分钟/小时/天为单位进行差异; (3)增加秒/分钟/小时/天。例如,它们需要转换为内部日期时间格式以获取月份或工作日。

您还有潜在的索引问题。如果要为结果选择天,小时,月等范围,则需要列上的索引。为此,datetime上的索引可能就足够了。

如果摘要按小时进行,您可能会发现将日期组件存储在日期字段中以及将小时存储在单独的列中会很有帮助。如果你要结合不同日子的时间,这将特别有用。

是否分析日期的其他组成部分(例如工作日和月份)以进行索引将取决于表中的数据量,性能要求以及您计划运行的查询。除了作为后来的优化之外,我不会倾向于这样做。