我正在使用此脚本创建一个表。
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)
关于指数还有其他考虑因素吗?
答案 0 :(得分:2)
索引几乎完全出于性能原因而存在。我可以轻易想到的一个主要例外是独特的索引。这些也用于强制unique
约束。
还有一个问题是foreign key
约束要求引用表中的唯一或主键约束。
答案 1 :(得分:2)
索引支持查询并强制执行某些表约束。如果你有一个'只写'表,那么索引可能对你没什么帮助。根据我的经验,这些很少见。
答案 2 :(得分:2)
您确实创建了主键,对吗?
索引是出于性能原因,除非它们也是唯一的。在这种情况下,它们要求每个记录对受影响的列具有不同的值/值集。
聚簇索引还将确定行在数据库中的物理存储方式,但这可能也属于“性能”。
答案 3 :(得分:2)
正如其他帖子所述,索引主要用于表现原因。
Here is a blog post解释使用它们的优点和缺点。
查询和存储过程效果
随着表的大小增加,如果应用索引,则需要读取以查找信息的数据量将会少得多。如果没有应用索引,则需要读取整个表以查找数据。
插入效果
由于表中的插入操作也必须更新索引,因此在表上创建索引后,插入性能可能会降低。
空间要求
由于索引是有关数据表的附加信息,因此它们需要一些空间来存储信息。
索引维护
内部碎片和外部碎片都会对表的性能产生影响。查看有关何时以及如何重组索引的建议。 SQL将自动更新每次重组和重建的索引统计信息。
SQL Server使用“索引统计信息”来决定是否应使用索引。