Sql 我是否应该创建一个新的DB列?
我不知道在Mysql数据库中创建一个新列是否更好 我有一张桌子: 计算数据 (id、日期、_值、状态) 状态是一个布尔值 我需要一个名为:Sql 我是否应该创建一个新的DB列?,sql,mysql,database,database-design,Sql,Mysql,Database,Database Design,我不知道在Mysql数据库中创建一个新列是否更好 我有一张桌子: 计算数据 (id、日期、_值、状态) 状态是一个布尔值 我需要一个名为:the_filtered_value 我可以像这样很容易地得到它: 选择IF(状态为FALSE,0,_值)作为从计算的_数据中筛选出的_值 computed_data表中有数百万个条目,我在图表和数据表中显示The_值和The_filtered_值(使用php) 最好在计算的\u数据表中创建一个新列过滤的\u值,还是只使用选择IF查询? 在“更好”中,我看到
the_filtered_value
我可以像这样很容易地得到它:
选择IF(状态为FALSE,0,_值)作为从计算的_数据中筛选出的_值
computed_data
表中有数百万个条目,我在图表和数据表中显示The_值
和The_filtered_值
(使用php)
最好在
计算的\u数据
表中创建一个新列过滤的\u值
,还是只使用选择IF
查询?
在“更好”中,我看到:
- 性能更好
- 更好的数据库设计
- 易于维护
谢谢你的帮助 不要添加列。相反,基于原始数据表创建一个视图,并在视图中添加一个“虚拟”计算列,称为基于表达式的_filtered_值 通过这种方式,您可以轻松访问过滤后的值,而无需将该表达式的“逻辑”复制到代码中的不同位置,同时不存储任何派生数据。此外,在大多数情况下,您将能够直接对视图进行操作,就像它是一个表一样
CREATE VIEW calculated_data_ex (id, date, the_value, status, the_filtered_value)
AS SELECT id, date, the_value, status, IF(status IS FALSE, 0, the_value)
FROM calculated_data
添加额外字段会增加应用程序的复杂性,但会使查询更容易(特别是在其他表上加入时)
我个人总是试图在数据库中尽可能地分离数据,并在我的应用程序中处理这种情况。使用MVC模式使这项任务更容易。这在MS SQL中有效,但我不知道MySQL是否支持该语法
declare @deleteme table (value int, flag bit)
insert @deleteme
Values
(1,'False')
,(2,'true')
Select *, (flag*value) AS the_filtered_value from @deleteme
很难说。如果添加一个新列,则必须填充它(速度慢,但只执行一次)并在更新时维护它(可能会减慢其他例行程序的速度)。如果你在运行中计算它,它可能会减慢你的查询速度。老实说,我认为您最好的选择是现在在不使用列的情况下进行一些计时测试,添加列,然后进行更多计时和性能测试。如果将来我想在表中添加额外的列,我是否需要重新创建视图?如果您想在视图中看到该列(情况并非总是如此),然后必须重新创建视图定义以包含附加列。