大生长表SQL的良好设计

时间:2018-10-02 23:02:52

标签: sql database database-design

我的订单表包含,

Order table{
    order id, item id, date...
}

随着时间的流逝,桌子将无限扩大。

处理生长桌时的良好做法是什么?

我正在考虑创建一个sp以检查查询日期,然后每天创建一个新表。这似乎不是一个好的解决方案。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

这些评论非常准确和正确:没有理由照顾这样的桌子。 如果您在某大型零售公司工作,并且期望每小时成千上万的订单,那么该解决方案是在硬件而非数据库中进行的。带有RAID 0中多个SSD磁盘的高端裸机服务器将允许处理1 TB的表而不会费力。 在数据库中,简单,通用的做法(例如正确的索引编制)就足够了。详细信息取决于您的DBMS:适用于Oracle的信息不同,适用于MySQL的信息,适用于MS-SQL的信息和适用于PostgreSQL的信息。

但是,如果您希望某些跨星系业务​​,那么您必须考虑以下事实:每个会计年度已关闭的订单都可以存档。那些旧的和送达的订单可以复制到另一个表中的另一个表(甚至是NoSQL DB)中,在另一个位置进行压缩,并可能在性能较低的硬件中使用,从而减轻了生产表的负担。经过多年的使用(在稳定,不扩展的业务中),“订单”表将变得相当稳定:每年有许多新订单,许多已在年底存档。 在这种情况下,无论如何,您都可以要求外星人提供外星人机器来处理数据库。

答案 1 :(得分:0)

正如其他人所说,由于数据库功能强大,因此不太可能需要存档。

一个未提及的区域(并且因数据库而异)正在分区。顾名思义,分区使您可以通过数据库而不是代码来管理数据块。尽管可以将其用于性能,但这不是唯一的情况。它更有可能用于管理(例如,仅备份本周的数据,重建索引等)。您将需要检查您特定数据库的功能,以查看是否有任何好处(但不要被性能低迷所困扰!)