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

Sql 数据库表中索引的缺点是什么?,sql,sql-server,database,indexing,Sql,Sql Server,Database,Indexing,有没有理由不为我的每个数据库表创建一个索引来提高性能?似乎一定有某种原因,否则默认情况下所有表都会自动有一个 我使用MS SQL Server 2016。表上的一个索引不是什么大问题。对于主键或声明为唯一的列(或列组合),您会自动拥有索引 索引有一些开销。索引本身占用磁盘和内存空间(使用时)。因此,如果空间或内存是问题,那么太多的索引可能是一个问题。插入/更新/删除数据时,需要维护索引以及原始数据。这会减慢更新速度并锁定表(或部分表),这可能会影响查询处理 每个表上的少量索引是合理的。在设计这些

有没有理由不为我的每个数据库表创建一个索引来提高性能?似乎一定有某种原因,否则默认情况下所有表都会自动有一个


我使用MS SQL Server 2016。

表上的一个索引不是什么大问题。对于主键或声明为唯一的列(或列组合),您会自动拥有索引

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


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

通常我建议每个表至少有一个索引,这将在表主键(例如标识列)上自动创建。然后外键通常会受益于索引,这将需要手动创建。应该为WHERE子句中经常包含的其他列编制索引,特别是当它们包含许多唯一值时。在只有两个值的情况下,索引列(如性别(低基数))的好处值得商榷。 “我的数据库”中的大多数表都有1到4个索引,这取决于表中的数据以及如何检索这些数据。

有索引的优势
  • 读取速度:当该列位于WHERE子句中时选择更快
有索引的缺点
  • 空间:需要额外的磁盘/内存空间
  • 写入速度:插入/更新/删除速度较慢

简单的答案是,当表中的
插入/更新/删除
多于
选择
时,在该表上创建
索引
可能无效。其他缺点是增加了存储需求(对于索引本身),可能还有索引维护计划。您是否计划在2017年创建索引?请查看以下链接1。2.索引过多还会增加编译开销,并可能增加由于数据访问路径不同而导致死锁的可能性。@TT。你是对的,我学到了一些东西:。@GordonLinoff是的,我有点急于纠正,但我有一种刺痛的怀疑。查找它,发现它在最初编写时是正确的:)。哈尼!