1

我讀過在FK上連接表時,連接執行的列的數據類型會影響性能。例如,加入int比加入varchar(128)要快。我的問題是,基於數據類型或該數據類型中的值,加入字段的速度是否更快?連接時的外鍵類型

例如,如果我在-2,147,483,648的值上進行連接,是否比連接上的「J」值更快,因爲「J」在數據庫中佔用更多空間,假設「J」來自varchar(128)字段?如果它們都來自整數列,那麼1的值是否與-2,147,483,648的速度相同?

+0

很容易測試,不是嗎?只需創建兩對錶並在一個值中使用「int」,但在另一個值中轉換爲「varchar(128)」。每桌放幾億行,並測量加入它們需要多長時間。與我們分享您的發現。我預計'varchar'會變慢,但我不知道它會有多重要。它應該至少與服務器必須從磁盤讀取的字節數成比例。在所有情況相同的情況下,'varchar'使用的字節數多於'int'或'smallint',所以它會比較慢。 –

回答

1

性能比較(不涉及類型轉換或轉換)的性能的主要因素是數據類型的大小。 SQL Server中的整數類型具有固定大小(int爲4個字節,bigint等爲8個字節 - 詳細信息請參考the documentation),所以實際數據是無關緊要的。另一方面(而不是char s),它們的大小會根據數據大小而變化(有關詳細信息,請參閱the docs),因此使用較短的數據可能確實會影響查詢的性能,但您將擁有有相當多的行可以注意到任何區別。