【发布时间】:2016-09-29 13:29:36
【问题描述】:
我有一张桌子
名称:order
和
id、product_id、comment
现在我想添加一个状态
新表:order_state
1 -> finished
2 -> started
等
然后在表order中添加一个字段order_state_id
我必须以什么方式担心性能?
这是否总是表现良好,或者它不会的情况是什么?例如我的意思是当有很多订单进行连接等时,比如 200'000 个订单
我以前使用过 mysql 视图,它们是 horrible 我创建的视图显然包含多个连接。这不是一个相关的问题吗?
【问题讨论】:
-
在这种特殊情况下,一个单独的表只存储 order_state 只能采用有限的一组值,这将是浪费且性能不高。相同的数据可以很容易地保存在订单列中。冗余级别将完全相同。
-
order_state_id 是一个低频率域。您可以将其实现为表(如您的问题)或
CHECK约束,或作为真正的域(不知道 mysql 是否支持这些),或作为枚举(同上)。在所有情况下,存储要求通常是 sizeof int,域表版本可能意味着外键支持索引以加速级联。性能应该不是问题(低基数将启用哈希连接/查找)(如果 mysql 有这些) -
@joop - MySQL 允许
CHECK语法,但忽略它。
标签: mysql sql database-performance