数据库表中的索引有什么缺点?

新手上路,请多包涵

有什么理由我不应该为我的每个数据库表创建一个索引,作为提高性能的一种手段?似乎必须有一些原因,否则所有表默认情况下都会自动拥有一个。

我使用 MS SQL Server 2016。

原文由 Stpete111 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 646
2 个回答

表上的一个索引没什么大不了的。您会自动对作为主键或声明为唯一的列(或列组合)建立索引。

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

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

原文由 Gordon Linoff 发布,翻译遵循 CC BY-SA 3.0 许可协议

有索引的好处

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

有索引的缺点

  • 空间:需要额外的磁盘/内存空间
  • 写入速度:较慢的 INSERT / UPDATE / DELETE

原文由 Martin Thoma 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进