2017-08-01 104 views
3

我在我的數據庫中有一堆數據,我想過濾掉超過一週的存儲數據。我使用的是SQLServer,我發現我可以使用'DATEDIFF'函數。SQL查詢 - 匹配日期時間與匹配整數

目前,它的工作非常快,但目前我沒有很多記錄,因此任何事情都可以順利進行。

經過一些在線研究後,我發現數據庫中整數的比較比字符串的比較快,我現在假設日期時間(使用給定函數)的比較在主要規模上甚至更慢。

比方說,我的數據庫表中的內容是這樣的: enter image description here

目前,我會過濾掉舊的像一個星期,像這樣記錄:

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。請求應在一週後過期,因爲它們在那時不會有效。我需要顯示有效的請求和過期的請求(所以消費者有一個概述)。所有這些請求都存儲在數據庫表中。

+0

你能給你的意思是「超過一週」什麼例子?您的代碼與保留過去7天的數據不同。 –

+0

@GordonLinoff上面寫的查詢獲取超過一週的行,所有數據都保留爲 – Dubb

+0

。 。您的邏輯保留最近一整週以及此後的任何日期的所有行。目前還不清楚這是否意味着「存儲了超過一週的時間」。這不是我如何解釋你的描述。 –

回答

2

索引是旨在提高選擇查詢性能的對象,缺點是它們減慢了插入刪除和更新操作,因此必須在必要時使用它們。通常DBMS提供工具來解釋查詢執行計劃。

也許你只是需要在日期列中添加索引:

create index "index_name" on onlineMainTable(Date) 

和查詢可能是

SELECT * FROM onlineMainTable WHERE Date > DATEADD(week,-1,GETDATE()); 
+0

我會研究這個,謝謝你的迴應! – Dubb

+0

爲什麼索引會加快速度?也許是一個愚蠢的問題,但是不管它是否被索引或不是遍歷整個表? – Dubb

+2

如果有索引,它將被掃描,而如果它被實現爲二叉樹,它已經排序 –