2012-06-18 75 views
0

我有一個表,如下所示:存儲按時間順序排列的行的有效方法?

CREATE TABLE IF NOT EXISTS grades(_id, timestamp, extra); 

我想創建的「時間戳」的指標,所以我做:

CREATE INDEX idx_timestamp ON grades(timestamp); 

我想選擇20個記錄在time based off the timestamp then:

SELECT * FROM grades WHERE timestamp > 123 ORDER BY timestamp ASC LIMIT 20; 

那麼,有沒有更有效的方法來定義列「timestamp」?我只是猜測把它指定爲一個索引列是我們所能做的,並且爲排序順序指定「ASC」是一個無操作 - 或者我可以告訴sqlite存儲由時間戳預先排序的記錄嗎?

我基本上是試圖實現一個尋呼系統,一次選擇20個項目按時間順序排序的頁面。

謝謝

回答

0

這很好。它會使用索引來訂購,所以它會提高速度。雖然,取決於你在做什麼,你可能會想緩存一些記錄。

SELECT * FROM grades WHERE timestamp > 123 ORDER BY timestamp ASC LIMIT 200;

現在,我們可以在同一時間得到200,但現在我們將讓JavaScript或服務器處理分頁。基本上你會跟蹤分頁的位置,然後只在需要時再次訪問數據庫。另外,通過使用更有限的時間戳WHERE子句,它實際上非常快速和高效。比使用LIMIT N,M更好。

如果您執行第二個選項,您將能夠緩存該查詢,具體取決於它被擊中的頻率。因此,如果多人持續詢問某件事情,數據庫將緩存它,並且它已經存在,它會很快恢復。

相關問題