[SQL SERVER]定義FK改善效能
定義FK可以讓查詢最佳化程式預先知道物件關聯性進而產生較佳執行計畫,
下面舉一個簡單例子:
TSQL查詢如下
select t1.SalesOrderID
from dbo.SalesOrderHeader t1 join dbo.Address t2 on t1.BillToAddressID=t2.AddressID
SalesOrderHeader 未定義FK
邏輯讀取:207
執行計畫明顯看到存取兩個資料表後inner join。
SalesOrderHeader 定義FK
邏輯讀取:21
執行計畫看到只需存取單一資料表即可處理。
由上面例子得知,透過FK預先定義資料表關聯性,可讓查詢最佳化程式產生較佳執行計畫,
查詢最佳化程式分析該TSQL後,知道只需存取單一資料表即可返回結果集。