我正在创建一个表来存储每周产品的数据,实际上是计数器。
例子:
id = 1
productId = 195
DateTime = 01/07/2012
Counter = 0
我的问题是关于数据库存储空间、查询灵 active 和性能。
我考虑使用 SmallInt 'WeekNumber' 列而不是 DateTime 列。
我将决定周开始的日期(基准日期)。假设 2012 年 10 月 10 日。
对于每个产品和每个星期,都会有一行代表我每天计算的总和(即特定产品页面的综合浏览量)。
来 self 读过的内容:
日期列是4个字节
SmallInt 是 2 个字节
我想尽可能节省空间,但我希望能够根据日期范围(2012 年 8 月到 2013 年 9 月)、特定年份的特定星期等查询数据库。
这种模式方法好吗,否则我会发现自己在 SQL 性能、查询灵 active 、索引等方面存在问题。
最佳答案
考虑一下为了节省 2 个字节 一个字节....
为了使用 smallint
,您将通过一个函数传递对数据的每次调用,以获取从您自己的任意日期开始的“周数”....这既不是性能更高,也更清晰。
同样,查询也不那么灵活,因为每个查询都需要根据您神奇的“开始日期”进行比较,而不仅仅是日期比较/组。您的查询可能无法进行 SARGable,并且可能较慢
编辑:根据您的评论,您有 50GB 的硬性限制......对于您正在讨论的聚合数据库来说,这是一个很大的空间。使这个复杂化,您会招致过度压力和可持续性损失。
根据 MySQL,DATE
类型只有 3 个字节,而 SMALLINT
有 2 个字节>
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
因此,您将每行节省一个字节(您说每周 2000 个)...所以假设每周 2KB,每年 104KB...
关于mysql - MySQL 中的 SmallInt 与 Date - 性能、灵活性和大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11724877/