数据库表中的索引有哪些缺点?

Stp*_*111 8 sql database sql-server indexing

有什么理由我不应该为每个数据库表创建索引,以提高性能?似乎必须存在某些原因,否则所有表默认会自动拥有一个.

我使用MS SQL Server 2016.

Gor*_*off 17

桌子上的一个索引并不是什么大问题.您自动拥有作为主键或声明为唯一的列(或列组合)的索引.

索引有一些开销.索引本身占用磁盘和内存空间(使用时).因此,如果空间或内存是问题,那么太多的索引可能是一个问题.插入/更新/删除数据时,需要维护索引以及原始数据.这会降低更新速度并锁定表(或表的某些部分),这会影响查询处理.

每个表上的少量索引是合理的.这些应该考虑到典型的查询负载.如果索引每个表中的每一列,则数据修改会变慢.如果您的数据是静态的,那么这不是问题.但是,用索引占用所有内存可能是一个问题.

  • 索引太多也会增加编译开销,并且可能会因不同的数据访问路径而增加死锁的可能性. (3认同)

Mar*_*oma 7

有索引的好处

  • 读取速度:当该列在 WHERE 子句中时更快的 SELECT

有索引的缺点

  • 空间:需要额外的磁盘/内存空间
  • 写入速度:较慢的插入/更新/删除