【问题标题】:Design tips for large database tables?大型数据库表的设计技巧?
【发布时间】:2011-10-04 19:05:55
【问题描述】:

这里是数据库新手。

我想规划一个销售发票数据库,每月将在其中添加数百万条记录/行。
里面的数据并没有那么重,但有一些信息像id,amount, etc...
问题是表需要非常(非常)频繁地更新。
我担心将来表会增长得如此之快并减慢系统速度。
我正在寻找一般设计技巧,我应该如何更新这种表格。
我的架构中还有其他一些表,但该表是最重要且更新最频繁的表。
是否有任何设计/提示/架构,所以我不必直接更新该表。

这是我的平台简介。

Application : java/spring mvc
Database    : mysql
OS          : CentOS 6

【问题讨论】:

  • 欢迎来到stackoverflow。我已编辑您的帖子以使其更具可读性。如果您在问题布局方面需要帮助,可以点击橙色的?
  • 如果它只是一个表,并且只需要来自这个表的结果(并且不需要复杂的连接)......我想如果你索引适当的列,你会很高兴。
  • 嗯。我需要在该表上插入和更新。一年后我的桌子1200万,我还去争取吗?
  • 1200万在数据库方面并不是一张大表。
  • 谢谢,我今天学到了很多。:P

标签: mysql database database-design


【解决方案1】:

规则 1:在速度变慢之前不要担心性能问题。

规则 2:将这些表标准化到至少 3NF

规则 3:如果您有大量更新,请在索引上放轻松,不要声明唯一索引。

do something like:

id integer not null primary key auto_increment  <<-- simple primary key
amount decimal(10,2) not null
.....

规则 4:表的大小不影响插入速度。 (除非你有唯一的索引)

提示:使用 InnoDB。

【讨论】:

  • 感谢您的提示,我的怪物表将只有一个主键索引(id)。但我也需要插入和更新。还有更多提示吗?谢谢
  • @darkcloudbird,是的,别担心,只要您不尝试更新所有内容,更新就不是问题。无论如何,发票没有太多更新。只需为尚未最终确定的发票使用不同的表格,为已发出的发票使用 final_invoice 表格(因此一成不变)
  • 另一件可能有帮助的事情是考虑您是否可以定期维护您的怪物表以降低数据量。例如,是否可以添加 lastModified 列,为其插入和更新指定 now() 的默认值,然后将所有具有 lastModified 值的行在 x 天内存档到另一个表以进行报告/分析?可能不可能(取决于数据的性质)但可能会有所帮助。
  • 谢谢汤姆。我最初的想法与您的建议非常相似,但我无法存档数据,因为我们正在实施的就像一个计费系统,我们的客户可以随时支付发票(当然还有滞纳金)。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多