我想提高SQLite3数据库的性能。我首先采用最极端的行动(只是为了看看会发生什么),并为数据库中每个表的每一列添加一个索引。
数据库大小增加了一倍以上,令我惊讶的是,性能急剧下降。我以前每秒获得4000次选择的地方现在每秒可以获得50次选择。
这个问题并不是我的具体情况。我的问题是; 添加索引是否有可能降低SQLite3中的 SELECT
性能?我问,因为我想知道我的问题是我添加了太多索引,还是我在某个地方犯了一个导致速度减慢的错误。
更具体地说明 my 案例:数据库从140 MB增加到280 MB,我有一个SSD。
答案 0 :(得分:1)
有一种机制可以使其他索引导致速度放缓:
大多数优化决策都是针对最糟糕的情况而设计的 - 当您访问的数据太大而无法放入任何缓存并且必须从磁盘加载时。
如果数据本身适合缓存,但查询使用的所有各种索引都非常大,以至于整个工作集变得太大,您将获得更多交换。
SELECT查询将忽略任何实际未使用的索引。 但是,INSERT / UPDATE / DELETE语句必须更新已更改表的所有索引,因此每个附加索引都会减慢此类更改。
使用EXPLAIN QUERY PLAN检查查询实际使用的索引。
阅读Query Planning和The SQLite Query Planner以了解如何使用索引。