最近我通过给SQLite一个好的索引,将一条复杂查询的速度提高了一个数量级。这样的结果让我想知道是否应该为其他经常用于JOIN或ORDER BY子句的字段创建索引。但我不想太过热心而导致适得其反:我认为一定有一些原因不创建索引,否则每个字段都会默认创建索引。
在这种情况下我使用的是SQLite,但当然如果有与DBMS无关的建议也欢迎。
最近我通过给SQLite一个好的索引,将一条复杂查询的速度提高了一个数量级。这样的结果让我想知道是否应该为其他经常用于JOIN或ORDER BY子句的字段创建索引。但我不想太过热心而导致适得其反:我认为一定有一些原因不创建索引,否则每个字段都会默认创建索引。
在这种情况下我使用的是SQLite,但当然如果有与DBMS无关的建议也欢迎。
索引会减缓插入和更新的速度(这可能会导致锁定等严重问题),并且会增加磁盘空间成本。就是这样。
索引占用磁盘空间的成本通常微不足道。当表发生更改时,更新索引所需的额外写入成本通常是适度的。额外锁定的成本可能会很大。
这取决于表的读写比率以及索引实际用于加速查询的频率。