数据库表中的索引有啥缺点?
Posted
技术标签:
【中文标题】数据库表中的索引有啥缺点?【英文标题】:What are the disadvantages to Indexes in database tables?数据库表中的索引有什么缺点? 【发布时间】:2017-05-15 14:17:46 【问题描述】:我有什么理由不应该为我的每个数据库表创建一个索引来提高性能?似乎肯定有一些原因,否则所有表都会默认自动拥有一个。
我使用 MS SQL Server 2016。
【问题讨论】:
简单的答案是,当您的表中INSERT/UPDATE/DELETE
多于SELECT
时,在该表上创建Index
可能无效
其他缺点将是增加存储需求(对于索引本身),可能是索引维护计划。您是否计划在 2017 年创建索引?
请查看以下链接 1.social.msdn.microsoft.com/Forums/sqlserver/en-US/… 2.***.com/questions/764210/…
【参考方案1】:
拥有索引的优势
读取速度:当该列在 WHERE 子句中时,SELECT 更快有索引的缺点
空间:需要额外的磁盘/内存空间 写入速度:较慢的 INSERT/UPDATE/DELETE【讨论】:
【参考方案2】:我通常建议每个表至少有 1 个索引,这将在您的表主键上自动创建,例如 IDENTITY 列。然后外键通常会从索引中受益,这需要手动创建。应该为 WHERE 子句中经常包含的其他列建立索引,尤其是当它们包含许多唯一值时。当只有 2 个值时,索引列的好处,例如性别(低基数)是有争议的。 我数据库中的大多数表都有 1 到 4 个索引,具体取决于表中的数据以及如何检索这些数据。
【讨论】:
【参考方案3】:表上的一个索引没什么大不了的。您会自动对作为主键或声明为唯一的列(或列组合)建立索引。
索引有一些开销。索引本身占用磁盘和内存空间(使用时)。所以,如果空间或内存是问题,那么太多的索引可能是一个问题。插入/更新/删除数据时,需要维护索引以及原始数据。这会减慢更新速度并锁定表(或部分表),从而影响查询处理。
每个表上的少量索引是合理的。这些应该在设计时考虑到典型的查询负载。如果您索引每个表中的每一列,那么数据修改速度会变慢。如果您的数据是静态的,那么这不是问题。但是,用索引占用所有内存可能是个问题。
【讨论】:
索引过多还会增加编译开销,并且会因数据访问路径不同而增加死锁的可能性。 @TT。 . . .你是对的,我学到了一些东西:en.oxforddictionaries.com/explore/number-of-people-is-or-are. @GordonLinoff 是的,我有点急于纠正这个问题,但我有一个刺痛的疑问。查了一下,你最初写的时候是正确的:)。 HNY!以上是关于数据库表中的索引有啥缺点?的主要内容,如果未能解决你的问题,请参考以下文章