【发布时间】:2010-10-24 14:01:00
【问题描述】:
有人告诉我,如果我将两个表作为外键,SQL Server 将在子表中创建类似于索引的东西。我很难相信这是真的,但找不到与此相关的太多内容。
我提出这个问题的真正原因是,我们在针对可能有 15 个相关表的表的删除语句中遇到了一些非常缓慢的响应时间。我问过我们的数据库人员,他说如果字段上有外键,那么它就像一个索引。您对此有何经验?我应该在所有外键字段上添加索引还是它们只是不必要的开销?
【问题讨论】:
-
我和你的数据库人有同样的理解——FK 实际上创建了一个索引。
-
否 - FK 确实 NOT 自动创建索引。创建一个是有意义的 - 但它不由 SQL Server 自动完成。
-
问这个问题一点也不傻!
-
如果您的删除速度较慢,并且您要删除的表被其他表引用,您可能会通过索引 other 表中的外键来提高性能。这是因为当 SQL 删除一行时,它需要检查该行的引用完整性。为此,它显然需要检查是否存在引用您要删除的行的其他行。
-
我会说一个不知道这一点的数据库人员一定非常需要培训。数据库人员对性能负责,了解这类事情是他们的工作。这表明严重无能。
标签: sql-server