sqlite中的索引导致我麻烦和请求缓慢

时间:2015-03-19 13:36:20

标签: performance sqlite indexing

您好,我在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倍。所以我的问题是:

  • 这是正常行为吗?
  • 我该如何避免呢?
  • 我可以强制搜索模式查找正确的索引吗?

感谢您的回答; - )

亚辛。

1 个答案:

答案 0 :(得分:0)

好的,我终于找到了它:

我的SQLite数据库填充了大量数据(2Gb),然后我从未调用“ANALYZE”来检查数据并优化索引的使用。

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

ANALYZE

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

很高兴知道我猜; - )