不创建索引的影响

时间:2015-08-05 12:22:13

标签: sql sql-server

我正在使用此脚本创建一个表。

create table TimeFrames(
  Id int identity,
  Name varchar(100),
  Active bit
)

之前,我还通过添加主键和索引来更改表。但是,现在,我忘了做后者,因为我在功能上没有任何区别,我想知道是否只是因为性能方面的考虑才需要它。

alter table TimeFrames add constraint PkTimeFrames primary key (Id)
create clustered index IxTimeFramesId on dbo.TimeFrames(Id)

关于指数还有其他考虑因素吗?

4 个答案:

答案 0 :(得分:2)

索引几乎完全出于性能原因而存在。我可以轻易想到的一个主要例外是独特的索引。这些也用于强制unique约束。

还有一个问题是foreign key约束要求引用表中的唯一或主键约束。

答案 1 :(得分:2)

索引支持查询并强制执行某些表约束。如果你有一个'只写'表,那么索引可能对你没什么帮助。根据我的经验,这些很少见。

答案 2 :(得分:2)

您确实创建了主键,对吗?

索引是出于性能原因,除非它们也是唯一的。在这种情况下,它们要求每个记录对受影响的列具有不同的值/值集。

聚簇索引还将确定行在数据库中的物理存储方式,但这可能也属于“性能”。

答案 3 :(得分:2)

正如其他帖子所述,索引主要用于表现原因。

Here is a blog post解释使用它们的优点和缺点。

查询和存储过程效果

随着表的大小增加,如果应用索引,则需要读取以查找信息的数据量将会少得多。如果没有应用索引,则需要读取整个表以查找数据。

插入效果

由于表中的插入操作也必须更新索引,因此在表上创建索引后,插入性能可能会降低。

空间要求

由于索引是有关数据表的附加信息,因此它们需要一些空间来存储信息。

索引维护

内部碎片和外部碎片都会对表的性能产生影响。查看有关何时以及如何重组索引的建议。 SQL将自动更新每次重组和重建的索引统计信息。

SQL Server使用“索引统计信息”来决定是否应使用索引。