【问题标题】:How to organize storage of calendar dates in MySQL performance wise如何在 MySQL 性能方面组织日历日期的存储
【发布时间】:2012-12-10 22:02:13
【问题描述】:

我必须为数据库中的几乎每个表存储 2 个日期,例如tbl_clients tbl_users tbl_employers tbl_position tbl_payments tbl_quiz tbl_email_reminder

大多数时候我会存储“date_created”和“date_modified”,有时会存储一些额外的日期。

什么是在 MySQL 数据库性能方面存储日期的最佳方法(以后可能有很多客户的网站可能超过 50 万)

选项 1:为每个表添加 2 列日期。

选项 2:专门为日期创建表“tbl_dates”。

我在想选项 2 会更快,因为我只需要在一个特定页面上显示日期,例如“report.php”对吗?

还有我应该在“tbl_dates”中放多少列而不会使它太慢。

【问题讨论】:

  • 将它们存储在表级别。只要确保您使用的是本机日期类型。通过尝试在外部表上记录日期,您将为自己创造更多的工作。

标签: mysql date database-performance


【解决方案1】:

对于一般情况(行创建和行修改时间戳),我会将它们放在与它们相关的同一个表中。否则,您会发现您需要的后续连接会比简单的方法更减慢您的查询速度。

在任何情况下,您都不想养成构建“通用表”的习惯,许多表都可以JOIN - 这是因为理想情况下您将为每个关系创建外键,但这不会如果某些行属于tbl_clients,某些行属于tbl_users...(等等),则工作。

诚然,您的 MySQL 引擎可能会阻止您使用外键 - 取决于您使用的是哪一个 - 但(至少对我而言)重点是。

【讨论】:

  • 为什么不在表tbl_users 中创建字段user_id 主键,然后将其值添加到列user_id 相关的所有其他表中。
    或者有第三张表将tbl_users主ID与tbl_clients主ID连接起来

    我总是宁愿存储许多表而不是一张表,并使用LEFT JOIN我从来没有遇到过问题实际上更清楚地将数据放在不同的表中并为我加入使用具有 50 列的同一表的数据。除了 join 与任何其他方法具有相同的速度之外,您只需将索引添加到您用于 join 的数据库中的某些字段。
  • 如果 (a) 只有一小部分 tbl_users 行将具有创建/修改时间戳,或者 (b) 单行可以有多个创建/修改时间戳。据我所知,这两种可能性都不是真的,所以你会无缘无故地增加复杂性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2011-07-24
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
相关资源
最近更新 更多