【发布时间】:2012-07-28 07:41:21
【问题描述】:
我正在创建一个表格来存储每周的产品数据,实际上是计数器。
例子:
id = 1
productId = 195
DateTime = 01/07/2012
Counter = 0
我的问题是关于数据库存储空间、查询灵活性和性能。
我考虑使用 SmallInt 'WeekNumber' 列而不是 DateTime 列。
我将决定星期的开始日期(基准日期)。假设是 2012 年 10 月 10 日。
对于每个产品和每周,都会有一行代表我每天计算的总次数(即特定产品页面的浏览量)。
从我读到的:
日期列是 4 个字节
SmallInt 是 2 个字节
我想节省尽可能多的空间,但我希望能够根据日期范围(2012 年 8 月至 2013 年 9 月)、特定年份的特定星期等查询数据库。
这种架构方法好不好,否则我会发现自己在 SQL 性能、查询灵活性、索引等方面遇到问题。
【问题讨论】:
-
这听起来真的是毫无意义的微优化。您是否会拥有数百万或数十亿条记录,以便节省的空间实际上很重要?即便如此 - 您是否有真正的存储空间问题需要解决?我会说只是使用适当的日期并完成它
-
不错,我有 50GB 的限制。每周有 2000 个产品(行)。我需要知道我不会通过它以及性能和查询便利性、索引等方面的其他方面。
-
但是如果每周有 2000 行,您每周可以节省 4 KB,每年节省 208 KB。节省一兆字节需要十年时间。一万年(大约)可以节省一千兆字节。
-
嗯,还是这样。我想您可以使用 smallint 并从特定日期开始计算天数,但是您会为此放弃很多便利和速度。如果您每天添加它,也许考虑一些其他方式来防止填满您的空间 - 例如将旧日存档到本地数据库。
-
@IdanShechter 您可以使用 Date/ProductID 作为 PK 并忘记 id 列,没错....请问您的 50GB 限制是如何施加的?