您好,我在sqlite中有一个包含+ 800&#39,000行的表。
我用于搜索的每个字段都有索引。但我的请求率是缓慢的:
SELECT "links".* FROM "links"
WHERE "links"."from_id_admin" = "XXXX"
AND "links"."from_type" = "Section"
ORDER BY category_rank DESC, rank DESC
我花了800毫秒。 (只返回一行,所有时间都浪费在索引查找上)
我进一步调查了" 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足够的子句,我的请求就像预期的那样快(2ms):
SELECT "links".*
FROM "links"
WHERE "links"."from_id_admin" = "XXXXX"
ORDER BY category_rank DESC, rank DESC
呀。减少歧视意味着速度提高400倍。所以我的问题是:
感谢您的回答; - )
亚辛。
答案 0 :(得分:0)
好的,我终于找到了它:
我的SQLite数据库填充了大量数据(2Gb),然后我从未调用“ANALYZE”来检查数据并优化索引的使用。
因此,在数据库发生重大变化后,请始终使用:
ANALYZE
花了一秒钟,然后一切正常!
很高兴知道我猜; - )