我听说如果定义表关系,SQL会更快。
这是真的吗?
或者它可能更慢,我想知道。
答案 0 :(得分:4)
我的猜测是你在谈论外键。这也称为引用完整性,是constraint的一种。外键不是唯一的约束类型 - 您也可以具有唯一和检查约束。无论如何,insert
的参照完整性略慢,而select
的参考完整性则不快。
原因是它必须检查insert
ed值以确保它们存在于另一个表中。
如果要提高select
查询的性能,您希望将索引放在要加入和过滤的列上。但是,索引确实需要付出代价,因为它们会降低insert
,update
和delete
的速度,因为每次表格更改时索引都必须更新。“ / p>
因此,如果您的表格数量很大insert
/ update
,请不要添加太多索引。如果您的表格主要是select
,请尽可能使用索引。 Database Engine Tuning Advisor可以帮助您为一些最常见的查询定义这些索引。
确保在运行查询时使用查询执行计划(SSMS中的 Ctrl + L ),以便您可以看到SQL Server正在执行的操作。你想要尽可能多的seek
,因为这意味着它能够最有效地使用索引!
答案 1 :(得分:3)
如果定义了表关系,SQL就不会更快。
索引可提高效果; 参照完整性(表关系)根据业务需求确保数据质量。