我是否有任何理由不为每个数据库表创建索引,以提高性能?似乎必须存在某些原因,否则所有表默认会自动拥有一个。
我使用MS SQL Server 2016。
答案 0 :(得分:15)
桌面上的一个索引并不是什么大问题。您自动拥有作为主键或声明为唯一的列(或列组合)的索引。
索引有一些开销。索引本身占用磁盘和内存空间(使用时)。因此,如果空间或内存是问题,那么太多的索引可能是一个问题。插入/更新/删除数据时,需要维护索引以及原始数据。这会降低更新速度并锁定表(或表的某些部分),这会影响查询处理。
每个表上的少量索引是合理的。这些应该考虑到典型的查询负载。如果索引每个表中的每一列,则数据修改会变慢。如果您的数据是静态的,那么这不是问题。但是,用索引占用所有内存可能是一个问题。
答案 1 :(得分:1)
答案 2 :(得分:0)
作为最低限度,我通常建议每个表至少有一个索引,这将自动在表主键上创建,例如IDENTITY列。然后外键通常会从索引中受益,这需要手动创建。应该对WHERE子句中经常包含的其他列建立索引,特别是如果它们包含许多唯一值。索引列的好处,例如性别(低基数),当它只有2个值时,这是有争议的。 我的数据库中的大多数表都有1到4个索引,具体取决于表中的数据以及如何检索这些数据。