2012-03-27 37 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); 

应就这一领域的选择更快

相关问题