我在我的數據庫中有一堆數據,我想過濾掉超過一週的存儲數據。我使用的是SQLServer,我發現我可以使用'DATEDIFF
'函數。SQL查詢 - 匹配日期時間與匹配整數
目前,它的工作非常快,但目前我沒有很多記錄,因此任何事情都可以順利進行。
經過一些在線研究後,我發現數據庫中整數的比較比字符串的比較快,我現在假設日期時間(使用給定函數)的比較在主要規模上甚至更慢。
目前,我會過濾掉舊的像一個星期,像這樣記錄:
SELECT * FROM onlineMainTable WHERE DATEDIFF(wk, Date, GETDATE()) > 1
我認爲這個查詢將是相當如果桌子上有一千行,就會變慢。
狀態欄代表一個計算狀態,我想知道如果我要尋找一個特定的狀態而不是匹配的日期時間,我是否會加快過程,對於我來說,爲了將該狀態設置爲代表'舊記錄'我需要更新這些行之前,我選擇它們,它會看起來像這樣:
UPDATE table SET Status = -1 WHERE NOT Status = -1 AND DATEDIFF(wk, Date, GETDATE()) > 1;
SELECT * FROM table WHERE Status = -1;
我用'-1'爲例。
所以很明顯我可能是錯的,但我認爲更新在這種情況下將會足夠快,因爲不會有那麼多記錄要更新,因爲較舊的更新已經與它的狀態。選擇會更快,因爲我會匹配整數而不是日期。
我的(可能的)解決方案的缺點是每次獲取數據時我都會查詢兩次,即使可能不需要(如果每行都比1周更新)。
歸結爲這樣:我應該比較日期時間還是應該更新基於該日期時間的整數列,然後選擇使用這些整數的比較?
如果有一個不同的/更好的方式做到這一點我是耳朵。
上下文 我正在爲引用請求做一個webapp。請求應在一週後過期,因爲它們在那時不會有效。我需要顯示有效的請求和過期的請求(所以消費者有一個概述)。所有這些請求都存儲在數據庫表中。
你能給你的意思是「超過一週」什麼例子?您的代碼與保留過去7天的數據不同。 –
@GordonLinoff上面寫的查詢獲取超過一週的行,所有數據都保留爲 – Dubb
。 。您的邏輯保留最近一整週以及此後的任何日期的所有行。目前還不清楚這是否意味着「存儲了超過一週的時間」。這不是我如何解釋你的描述。 –