我正在开发字典应用程序。它需要增量搜索,这意味着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
这将返回以下值:
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表的想法有两个原因: