在大型数据库中,即使有索引,查询速度也非常慢



我有一个包含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);

最新更新