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