我已經創建了一個與我的corona/lua應用程序的sqlite表。它是一個〜〜700 000個值的散列表。該表有兩列,分別是hashcode(一個字符串)和值(另一個字符串)。在程序期間,我需要通過提供散列碼來多次獲取數據。SQLite數據檢索與選擇需要太長
我用這樣的代碼來獲取數據:
for p in db:nrows([[SELECT * FROM test WHERE id=']].."hashcode"..[[';]]) do
print(p)
-- p = returned value --
end
此語句雖然採取瘋狂太多的時間來執行
感謝,
編輯:
成功! 的錯誤是設置的哈希碼爲像下面的主鍵primare關鍵的事兒。和檢索時間了when正常:
CREATE TABLE IF NOT EXISTS test (id STRING PRIMARY KEY , array);
我也準備語句提前爲你說:
stmt = db:prepare("SELECT * FROM test WHERE id = ?;")
[...]
stmt:bind(1,s)
for p in stmt:nrows() do
唯一的問題是,數據庫文件的大小,這是大約18 MB,去29,5 MB
+1的索引,-1緩存(很少在sqlite的回報,因爲該行會在CPU緩存反正沒有網絡I/O參與。) – finnw
當你說覆蓋索引你的意思是一個數字索引,像1,2,3,4 ...會有幫助嗎? –
@ossumsiul覆蓋索引是* *也包含該查詢結果(其具有減輕主記錄的額外的訪問的益處,並具有重複的物理數據的副作用)所需的附加數據的複合索引。例如,一個化合物指數超過*兩者*'(ID,值)'「涵蓋」的'value'列,即使只有'id'柱(其出現在WHERE)用於找到'value'。在後SQLite的查詢規劃的文章做了解釋的一個不錯的工作,這怎麼可能* *幫助。 – user2864740