2012-03-27 75 views
0

隨機行基本上我有詞的數據庫,目標C - SQLite的選擇與另一個值

該數據庫包含一個rowid(主鍵),字和字長度表列。

我想選擇一個長度= x的隨機行並獲取該行的單詞。

這是針對iPhone遊戲項目的,查詢速度儘可能快(搜索是在遊戲中進行的)是高優先級。

例如:

SELECT * FROM WordsDB WHERE >= (abs(random()) %% (SELECT max(rowid) FROM WordsDB)) LIMIT 1; 

這個查詢非常快,在選擇一個隨機行快了很多比ORDER BY RANDOM()LIMIT 1,但是,如果我添加字長查詢我得到的問題:

SELECT * FROM WordsDB WHERE length = 9 AND rowid >= (abs(random()) %% (SELECT max(rowid) FROM WordsDB)) LIMIT 1 

認爲,通過隨機行不會總是有9

的長度我只是想知道什麼是這樣做的最快/最有效的方式。

感謝您的時間

注:2個%符號,因爲它是客觀c和查詢設置爲一個字符串。

+0

有什麼問題? – hamstergene 2012-03-27 13:50:05

回答

1

這一個似乎爲我工作確定:

select * from WordsDB 
where length = 9 
limit (abs(random()) % (select count(rowid) from WordsDB 
         where length = 9)), 1; 

注意length = 9出現在where條款中。

如果顯示緩慢,請在length上加索引。

1

添加一個索引到WordsDB.length

create index if not exists WordsDBLengthIndex on WordsDB (length); 

應就這一領域的選擇更快

相關問題