Query-Performance

優化兩個值之間的搜尋

  • February 27, 2022

我有一個以整數時間戳作為主鍵的表。幾乎該表上的每個查詢都屬於該模式

SELECT * FROM table WHERE timestamp BETWEEN x AND y

這些範圍通常明顯小於郵票的總範圍。插入很少發生,通常在每個其他現有郵票之後的時間戳處發生。

我能否以某種方式告訴我的數據庫(SQLite)保持這些條目“排序”,然後僅從開始時間戳進行選擇,從那裡搜尋行,然後在超過結束時間戳時立即停止以避免掃描整個表並比較每一行的值?或者這已經發生了?

您正在尋找的內容稱為索引,它可以滿足您的兩個目標。

索引保存按為索引定義的列的順序預先排序的數據。他們還(通常)使用 B-Tree 資料結構來有效地儲存數據,以便在查找樹中包含服務所需數據的節點範圍時不必掃描整個表您的查詢。

在 SQLite 中,主鍵也會自動創建為聚集索引。所以你實際上不需要做任何額外的事情。但是,如果在您的特定範例中,您關心索引不是主鍵的欄位,那麼您需要定義這樣的索引:

CREATE INDEX IX_IndexName ON TableName (SomeOtherFieldNotInThePrimaryKey)

有關索引的更多資訊,請參閱這篇文章

引用自:https://dba.stackexchange.com/questions/308014