Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql表设计建议_Mysql_Database Design_Database Performance - Fatal编程技术网

Mysql表设计建议

Mysql表设计建议,mysql,database-design,database-performance,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

我有一个关于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
替代设计的优点:

  • 对于第二种设计,我们不必存储空值(如果端口中没有这样的产品)
  • 我们可以很容易地添加新产品-与第一个设计相比,每个新产品都需要一个新列
替代设计的缺点:

  • 记录数量将从65万增加到65万*产品数量减去所有空记录;这将是大约210万条记录
在这两种情况下,我们将
id
列作为主关键字,并在
端口id
日期的组合上使用唯一关键字

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


感谢您的关注。

这取决于
产品的定义。
如果产品表是由最多三部分组成的静态组合,那么更改当前的设计将不会有多大帮助。

虽然当前的设计很难闻,但这将是一个依赖于业务的分析。
顺便说一句,必须小心更改产品表及其用法的副作用