2017-06-09 38 views
0

目前,我有列的MySQL表看起來是這樣的:mySQL有效位 - 替代?

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

valid本質上是一個有效位,1表示此行是這樣做的最新值(run_date,名)對,如果不是0則爲0。爲了使插入更簡單,我編寫了一個存儲過程,首先運行一個UPDATE table_name SET valid = 0 WHERE run_date = X AND name = Y命令,然後插入新行。

表讀取的方式是我通常只使用valid = 1行,但我不能丟棄無效行。顯然,這個模式也沒有主鍵。

有沒有更好的方法來構造這個數據或有效位,以便我可以加快插入和搜索?一堆不同順序的列索引變大。

+0

添加一個主鍵字段的開始!這將大大提高搜索性能。 –

回答

0

在下面的所有建議中,擺脫validUPDATE它。這是不可擴展的。

計劃A:在SELECT時間,使用'groupwise max'代碼找到最新的run_date,因此是「有效」條目。

B計劃:插入時有兩個表格並更改兩者:historyPRIMARY KEY(name, run_date)和簡單的INSERT聲明; current,其中PRIMARY 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