[SQL SERVER]定義FK改善效能

[SQL SERVER]定義FK改善效能

定義FK可以讓查詢最佳化程式預先知道物件關聯性進而產生較佳執行計畫,

下面舉一個簡單例子:

 

TSQL查詢如下

select t1.SalesOrderID
from dbo.SalesOrderHeader t1 join dbo.Address t2 on t1.BillToAddressID=t2.AddressID

 

 

SalesOrderHeader 未定義FK

image

邏輯讀取:207

 

image

執行計畫明顯看到存取兩個資料表後inner join。

 

 

SalesOrderHeader 定義FK

image

邏輯讀取:21

 

image

執行計畫看到只需存取單一資料表即可處理。

 

由上面例子得知,透過FK預先定義資料表關聯性,可讓查詢最佳化程式產生較佳執行計畫,

查詢最佳化程式分析該TSQL後,知道只需存取單一資料表即可返回結果集。