Mysql表设计建议

时间:2014-11-28 09:53:29

标签: mysql database-design database-performance

我有一个关于MySQL数据库表设计的一般问题。我有一张包含约65万条记录的表格,每年增加约10万条记录。数据要求频繁,平均每秒1.6次。

现在有以下结构

id   port_id         date        product1_price    product2_price    product3_price
 1         1   2012-01-01                100.00            200.00            155.00
 2         2   2012-01-01                  NULL            150.00            255.00
 3         3   2012-01-01                300.00              NULL            355.00
 4         1   2012-01-02                200.00            250.00            355.00
 5         2   2012-01-02                400.00            230.00            255.00

以这种方式存储数据不是更好吗?

id     port_id         date    product   price
1            1   2012-01-01          1     100
1            2   2012-01-01          1     200
1            3   2012-01-01          1     300
1            1   2012-01-02          1     240

替代设计的优点:

  • 使用第二种设计我们不必存储NULL值(如果端口中没有这样的产品)
  • 我们可以轻松添加新产品 - 与第一个设计相比,每个新产品都需要一个新列

替代设计的缺点:

  • 记录数量将从650 000增加到650 000 * number_of_products减去所有NULL记录;这将是大约210万条记录。

在这两种情况下,我们在idport_id的组合上将date列作为PRIMARY_KEY和UNIQUE键。

所以问题是:走哪条路?磁盘空间无关紧要,查询的速度是最重要的方面。

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

它接缝,这将取决于product表的定义 如果产品表是最多三个部分的静态复合,那么改变当前的设计将无济于事。

虽然目前的设计闻起来很糟糕,但这将是一项依赖商业的分析 对于产品表及其用法的副作用,必须谨慎改变BTW。