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

时间:2016-12-31 17:35:25

标签: sql sql-server database indexing

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

我使用MS SQL Server 2016。

3 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:1)

拥有索引的优势

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

有索引的缺点

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

答案 2 :(得分:0)

作为最低限度,我通常建议每个表至少有一个索引,这将自动在表主键上创建,例如IDENTITY列。然后外键通常会从索引中受益,这需要手动创建。应该对WHERE子句中经常包含的其他列建立索引,特别是如果它们包含许多唯一值。索引列的好处,例如性别(低基数),当它只有2个值时,这是有争议的。 我的数据库中的大多数表都有1到4个索引,具体取决于表中的数据以及如何检索这些数据。

相关问题