mySQL有效位 - 替代品?

时间:2017-06-09 13:18:09

标签: mysql database-design

目前,我有一个mySQL表,其列的内容如下所示:

run_date DATE
name VARCHAR(10)
load INTEGER
sys_time TIME
rec_time TIME
valid TINYINT

valid本质上是一个有效位,如果此行是此(run_date,name)对的最新值,则为1,否则为0。为了简化插入,我编写了一个存储过程,首先运行UPDATE table_name SET valid = 0 WHERE run_date = X AND name = Y命令,然后插入新行。

表读取的方式是我通常只使用valid = 1行,但我不能丢弃无效行。显然,这个模式也没有主键。

是否有更好的方法来构建此数据或有效位,以便我可以加快插入和搜索的速度?不同列的列上的一堆索引变大。

1 个答案:

答案 0 :(得分:0)

在下面的所有建议中,摆脱valid及其UPDATE。这不可扩展。

计划A:在SELECT时间,使用'groupwise max'代码查找最新的run_date,从而找到“有效”条目。

计划B:有两个表并在插入时更改两者:historyPRIMARY KEY(name, run_date)和简单的INSERT声明; currentPRIMARY KEY(name)INSERT ... ON DUPLICATE KEY UPDATE。 “通常”SELECTs只需触摸current

另一个问题:TIME仅限于838:59:59,旨在表示“一天中的时间”,而不是“已用时间”。对于后者,请使用INT UNSIGNED(或INT的某些变体)。对于格式设置,您可以使用sec_to_time()。例如sec_to_time(3601) - > 01:00:05