mysql - MySQL 中的 SmallInt 与 Date - 性能、灵活性和大小

标签 mysql sql

我正在创建一个表来存储每周产品的数据,实际上是计数器。

例子:

 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/

相关文章:

java - JdbcTemplate 不支持Parameterized Query 'IN' case?一定要通过NamedParameterJdbcTemplate吗?

sql - 不敏感地订购选择结果案例?

php - mysqli_prepare 和 mysqli_query 哪个更快?

mysql - SQL,按最大列数选择分组

mysql - perl tcp 套接字服务器到 mysql

java - ALTER TABLE CREATE CONSTRAINT IF NOT EXIST 可能吗?

php - 拉维尔 : For each where clause

php - Codeigniter Uri 字符串值出错

php - php 中是否可以采用 sqlite 数据库和 mysql 数据库并相互运行查询?

mysql - java.lang.IncompatibleClassChangeError : Found class com. mysql.jdbc.Statement,但接口(interface)是预期的