SQLite:即使有索引,大型数据库中的查询也非常慢

SQLite: Very slow queries in a large database even with indexes

我有一个很大的数据库。 数据库有 loginlevel 列。 在我为这些列创建索引之前,所有查询都非常慢。 我使用这些命令创建索引:

CREATE INDEX users_login_index on users(login);
CREATE INDEX users_level_index on users(level);

现在我可以通过 login(它是唯一的)快速找到一个用户或通过 level 快速找到许多用户。 例如,这个查询很快(立即生效):

SELECT * FROM users WHERE login='somelogin123';

但是这个查询非常慢:

SELECT * FROM users WHERE login='somelogin123' AND level=1;

在同一个数据库中。我不明白为什么在添加一个附加条件后查询变慢,该条件正在比较也被索引的列。 请向我解释这是如何工作的,或者我做错了什么以及如何解决我的问题。 希望得到您的帮助!

SQLite 可能选择了错误的索引。我怀疑 level 只有少量值。对于索引来说,这通常不是一个好主意。尝试将其设为复合索引:

CREATE INDEX users_level_index_login on users(level, login);