基本上我有一个单词数据库,
此数据库包含rowID(主键),单词和单词长度为表格列。
我想选择一个随机行,其中length = 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 :(得分:1)
为WordsDB.length添加索引
create index if not exists WordsDBLengthIndex on WordsDB (length);
应该更快地选择此字段
答案 1 :(得分:1)
这个似乎对我有用:
select * from WordsDB
where length = 9
limit (abs(random()) % (select count(rowid) from WordsDB
where length = 9)), 1;
请注意,length = 9
条款中都会显示where
。
如果length
似乎很慢,请添加索引。