SQLite的。如何快速从TABLE中选择值?

时间:2015-04-04 07:22:01

标签: android sql database performance sqlite

我正在开发字典应用程序。它需要增量搜索,这意味着SELECTING应该很快。有200000多行。首先让我解释一下表结构。我有这张桌子:

CREATE TABLE meaning(
key TEXT, 
value TEXT, 
entries BLOB);

有些时候我有这个索引:

CREATE INDEX index_key ON meaning (key)

此查询执行约500毫秒,这是非常慢的

SELECT value FROM meaning WHERE key LIKE 'boy%' LIMIT 100

然后我删除了这个索引,创建了一个不敏感的索引,这有助于将性能提高2-3倍。

CREATE INDEX index_key ON meaning (key COLLATE NOCASE);

现在这个查询的执行时间为75毫秒(分钟) - 275(毫秒),这对于增量搜索来说非常慢。

SELECT value FROM meaning WHERE key LIKE 'boy%' LIMIT 100

我尝试根据此post优化查询。

SELECT value FROM meaning WHERE key >= 'boy' AND key<'boz' LIMIT 100

但此查询执行时间为451毫秒。

EXPLAIN
SELECT value FROM meaning WHERE key LIKE 'boy%' LIMIT 100

这将返回以下值:

enter image description here

EXPLAIN QUERY PLAN
SELECT value FROM meaning WHERE key LIKE 'boy%' LIMIT 100

这将返回此值(详细信息列):

SEARCH TABLE meaning USING INDEX index_key (key>? AND key<?) (~31250 rows)

实际上,这些值并没有给我一些意义或关键优化。

是否可以通过优化此查询或创建另一个表或更改SQLite数据库的某些参数来优化要在〜10ms内执行的单词的SELECT?你能告诉我最好的方法吗?

PS。请不要建议使用FTS表。在以前的应用程序版本中,我使用过FTS。我同意它非常快。我离开FTS表的想法有两个原因:

  • 没有给出正确的结果(它包含用户不需要的词)
  • 需要更多磁盘空间

0 个答案:

没有答案