Performance sqlite中的索引导致我遇到麻烦和请求速度慢
您好,我有一个在sqlite中有+800000行的表 我对每个用于搜索的字段都有索引。但我的请求速度很慢: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毫秒。(仅返回一行,所有时间都浪费在索引查找上) 我通过“解释查询计划”进行了进
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