如果我有一个外键指向另一个不是 PK 的表索引字段,是否有任何性能问题/差异?
就像是
DECLARE @T1 TABLE
(
T1_ID INT IDENTITY PRIMARY KEY,
T1_SOMEID INT NOT NULL,
OfficeID VARCHAR(3) NOT NULL,
Data VARCHAR(200) NOT NULL
);
DECLARE @T2 TABLE
(
T2_ID INT IDENTITY PRIMARY KEY,
T1_SOMEID_FK INT NOT NULL,
OfficeID VARCHAR(3) NOT NULL,
OtherData VARCHAR(100) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
问题:
当我运行如下所示的查询时,性能是否会下降:
SELECT t1.T1_ID, t1.Data, t2.T2_ID, t2.OtherData
FROM @T1 t1
INNER JOIN @T2
ON t1.T1_SOMEID = t2.T1_SOMEID_FK
AND t1.OfficeID = t2.OfficeID
Run Code Online (Sandbox Code Playgroud)
两件事情:
1 - 您仍然需要有一个UNIQUE
约束才能使用字段作为外键。
2 - 在您的示例中,您的性能将下降,因为默认情况下 aPK
也是聚集索引。FK 字段上的非聚集索引将加快速度,JOIN
但您仍需要支付书签查找的费用,因为其他字段不在索引的叶级。如果您INCLUDE(otherdata)
在 NC 索引中,那么它应该可以正常工作(假设这ID
是您的聚集索引。
归档时间: |
|
查看次数: |
513 次 |
最近记录: |