mySQL 有效位 - 替代方案?

标签 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行,但我无法丢弃无效行。显然,这个模式也没有主键。

有没有更好的方法来构造这些数据或有效位,以便我可以加快插入和搜索速度?不同列顺序上的一堆索引会变得很大。

最佳答案

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

计划 A:在 SELECT 时,使用“groupwise max”代码来定位最新的 run_date,因此是“有效”条目。

计划 B:有两个表,并在插入时更改两个表:history,使用 PRIMARY KEY(name, run_date) 和一个简单的 INSERT陈述; 当前,带有PRIMARY KEY(name)INSERT ... ON DUPLICATE KEY UPDATE。 “通常的”SELECTs 只需要触摸当前

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

关于mySQL 有效位 - 替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44458884/

相关文章:

php - 玛根托 : How to apply special price for all the products?

php - 如何使用 mysqli 准备从数据库检索图像?

database - 如何规范不同用户组具有不同类型配置文件的数据库?

sql - 多对多关系设计 - 交叉表设计

sql - EAV 模型的替代方案 vs 混合策略 vs 简化和改进构建

mysql - 使用枚举列替代数据库设计,导致性能不佳

mysql - 使用 group_concat 的单个查询中的多个文本字段

javascript - 在 PHP 中创建模式警报而不是页面重定向验证

mysql - 两张表在Mysql中Join查询

tsql - 我是否必须显式创建 #temp 表?