sqlite 中的索引导致我遇到麻烦并且请求缓慢

Index in sqlite causing me trouble and slow requesting

你好,我有一个 table 在 sqlite 中有 +800'000 行。

我对我用来搜索的每个字段都有索引。但是我的请求速度很慢:

SELECT "links".* FROM "links" 
WHERE "links"."from_id_admin" = "XXXX" 
AND "links"."from_type" = "Section"   
ORDER BY category_rank DESC, rank DESC

我花了 800 毫秒。 (return只有一行,所有时间都浪费在索引查找上)

我进一步调查 "EXPLAIN QUERY PLAN" 结果如下:

"SEARCH TABLE links USING INDEX index_links_on_from_type (from_type=?)"
"USE TEMP B-TREE FOR ORDER BY"

奇怪的是,Sqlite 只使用 from_type 索引。问题是这个指数没有那么多的歧视(有 4 或 5 个不同的值)。

如果我足够多地删除 WHERE 子句,我的请求会像预期的那样快(2 毫秒):

SELECT "links".* 
FROM "links" 
WHERE "links"."from_id_admin" = "XXXXX" 
ORDER BY category_rank DESC, rank DESC

是的。更少的歧视意味着 400 倍的速度提升。所以我的问题是:

感谢您的回答;-)

亚辛。

好的,终于找到了:

我的 SQLite 数据库中填充了大量数据 (2Gb),因此我从未调用 "ANALYZE" 检查数据并优化索引使用。

所以在你的数据库发生重大变化之后,总是使用:

ANALYZE

花了一秒半,然后一切正常!

我猜很高兴知道 ;-)