2014-01-06 19 views
0

自定義排序假設我有一個這樣的模式:指標與源碼

CREATE TABLE abc(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    txt TEXT 
); 

CREATE INDEX "txtCS" ON "abc"("txt" COLLATE MY_CUSTOM_SORT); 

時將使用的SQLite我的索引上txt

,因爲我跑:(它不會搜索像我預期)

EXPLAIN QUERY PLAN SELECT * FROM abc ORDER BY txt COLLATE MY_CUSTOM_SORT DESC ... 

,它告訴我,它掃描表,兩次,使用txtCS指數

MY_CUSTOM_SORT是我的自己的排序功能,我迷上了sqliteCreateCollation。我只需要那些涉及特殊排序的查詢的索引,我希望它們更快

+0

我得到一個單獨的條目'SCAN TABLE abc using COVERING INDEX txtCS',這非常好。那是什麼?......?哪個SQLite版本? –

+0

這就是我得到的。但爲什麼它是掃描而不是搜索? – thelolcat

+0

我假設,爲了使用自定義SQL索引,MY_CUSTOM_SORT函數應該顯式聲明爲SQLITE_DETERMINISTIC - 請參閱[表達式,限制條件索引](https://www.sqlite.org/expridx.html)以獲取詳細信息 –

回答

1

EXPLAIN QUERY PLAN output中,SEARCH表示數據庫試圖用特定值查找某個特定記錄,而SCAN意味着數據庫遍歷整個表格。 該查詢返回所有記錄,因此最有效的操作是SCAN。

任何操作都可以通過索引加速。 (在SCAN中,數據庫只是按順序遍歷所有索引條目。)