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
花了一秒半,然后一切正常!
我猜很高兴知道 ;-)
你好,我有一个 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
花了一秒半,然后一切正常!
我猜很高兴知道 ;-)