数据建模:(为什么)我应该总是在FK列上创建索引吗?

时间:2016-09-06 17:21:11

标签: sql-server indexing data-modeling

考虑以下情况:

ParrentLookupTable:

  • PK: SomeCode CHAR(10)
  • 只有5行。
  • 不经常改变

MyTable的:

  • 每天增加100万行。
  • SomeCode FK到ParrentLookupTable
  • 没有基于 SomeCode
  • 进行搜索或排序的查询

这是FK定义

ALTER TABLE MyTable  CONSTRAINT FK_MyTable_ParrentLookupTable_SomeCode FOREIGN KEY(SomeCode)
REFERENCES ParrentLookupTable (SomeCode)

我应该创建索引IX_MyTable_SomeCode吗?

在这种写密集型工作负载场景中,索引会花费IO,我不确定它是如何变得有用的?

1 个答案:

答案 0 :(得分:1)

通常在父表中的列上添加索引是为了加快FK检查。在这种情况下,它可能根本没有帮助。 ParentLookupTable将适合一个数据库页面,因此如果它正在进行表扫描或索引搜索,它应该没那么重要。

在子表上的FK列上添加索引可能有助于级联删除。

这是一篇关于这个主题的文章 http://sqlperformance.com/2012/11/t-sql-queries/benefits-indexing-foreign-keys