Performance sqlite中的索引导致我遇到麻烦和请求速度慢

Performance sqlite中的索引导致我遇到麻烦和请求速度慢,performance,sqlite,indexing,Performance,Sqlite,Indexing,您好,我有一个在sqlite中有+800000行的表 我对每个用于搜索的字段都有索引。但我的请求速度很慢: SELECT "links".* FROM "links" WHERE "links"."from_id_admin" = "XXXX" AND "links"."from_type" = "Section" ORDER BY category_rank DESC, rank DESC 我花了800毫秒。(仅返回一行,所有时间都浪费在索引查找上) 我通过“解释查询计划”进行了进

您好,我有一个在sqlite中有+800000行的表

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

SELECT "links".* FROM "links" 
WHERE "links"."from_id_admin" = "XXXX" 
AND "links"."from_type" = "Section"   
ORDER BY category_rank DESC, rank DESC
我花了800毫秒。(仅返回一行,所有时间都浪费在索引查找上)

我通过“解释查询计划”进行了进一步调查,结果如下:

"SEARCH TABLE links USING INDEX index_links_on_from_type (from_type=?)"
"USE TEMP B-TREE FOR ORDER BY"
奇怪的是,Sqlite只使用from_类型索引。问题是在这个指数上没有太多的区别(有4或5个不同的值)

如果我删除了足够的条款,我的请求将如预期的那样快(2ms):

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

  • 这是正常的行为吗
  • 我怎样才能避免呢
  • 我可以强制搜索模式查找到正确的索引吗
谢谢你的回答;-)


是的。

好的,我终于找到了:

我的SQLite数据库中填充了大量数据(2Gb),但我从未调用“分析”来检查数据并优化索引使用

因此,在数据库发生重大更改后,请始终使用:

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


很高兴知道,我想;-)

您是否已验证未使用的索引是否存在并已正确填充?
ANALYZE