SQLite:即使有索引,大型数据库中的查询也非常慢
SQLite: Very slow queries in a large database even with indexes
我有一个很大的数据库。
数据库有 login
和 level
列。
在我为这些列创建索引之前,所有查询都非常慢。
我使用这些命令创建索引:
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);
我有一个很大的数据库。
数据库有 login
和 level
列。
在我为这些列创建索引之前,所有查询都非常慢。
我使用这些命令创建索引:
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);