我发现我的查询运行速度非常慢,当两个表在内部连接在一起时,数据规模很大,而对于小数据集,这很好。有人告诉我,sqlite3只能对查询中的每个表使用一个索引,但我不确定,有人知道在哪里可以找到信息吗?非常感谢!
关于sqlite如何使用索引的许多信息可以在以下文档URL中找到:
- https://www.sqlite.org/queryplanner.html
- https://www.sqlite.org/optoverview.html
- https://www.sqlite.org/queryplanner-ng.html
基本上,每次在查询中使用表时,通常最多可以使用该表的一个索引(一个显著的例外是WHERE
或ON
中的OR
条件可能允许多个索引,每个项一个(。查询计划器试图选择最合适、最快的查询。在已填充的数据库上运行ANALYZE
会生成统计信息,当存在多个可能的索引时,这些统计信息可用于改进选择。
了解EXPLAIN QUERY PLAN
报告对于了解特定查询最终是如何解析的以及如何以及涉及哪些索引至关重要。