有什么理由我不应该为我的每个数据库表创建一个索引,作为提高性能的一种手段?似乎必须有一些原因,否则所有表默认情况下都会自动拥有一个。
我使用 MS SQL Server 2016。
原文由 Stpete111 发布,翻译遵循 CC BY-SA 4.0 许可协议
有什么理由我不应该为我的每个数据库表创建一个索引,作为提高性能的一种手段?似乎必须有一些原因,否则所有表默认情况下都会自动拥有一个。
我使用 MS SQL Server 2016。
原文由 Stpete111 发布,翻译遵循 CC BY-SA 4.0 许可协议
原文由 Martin Thoma 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
803 阅读
表上的一个索引没什么大不了的。您会自动对作为主键或声明为唯一的列(或列组合)建立索引。
索引有一些开销。索引本身占用磁盘和内存空间(使用时)。所以,如果空间或内存是问题,那么太多的索引可能是一个问题。插入/更新/删除数据时,需要维护索引以及原始数据。这会减慢更新速度并锁定表(或部分表),从而影响查询处理。
每个表上的少量索引是合理的。这些应该在设计时考虑到典型的查询负载。如果您索引每个表中的每一列,那么数据修改速度会变慢。如果您的数据是静态的,那么这不是问题。但是,用索引耗尽所有内存可能是一个问题。