2011-05-12 43 views
2

由於this之前發佈的討論何時想要使用CHAR指出的VARCHAR,當存儲的值大致相同時,可以獲得性能優勢。當然,我會選擇CHAR作爲存儲2個字符的狀態碼數據的數據類型。CHAR與VARCHAR以及加入時產生的影響

我只想確認一下,這意味着當你執行一個SQL來過濾這個列時,過濾值必須用足夠的空格填充以等於char字段的定義長度。

例如,假定一個表 「CODE_TABLE」,其中列10_CHAR_CODE被定義爲CHAR(10):

SELECT * FROM CODE_TABLE WHERE 10_CHAR_CODE = 'ABCDE'

並且如果10_CHAR_CODE是一個「邏輯「外鍵,但不存在特定的關係完整性約束,存儲在10_CHAR_CODE查找表中的值理想地應該是相同的數據類型(Char(10))以避免在加入時必須執行低效的RTRIM功能

(我們有一個嬰兒大小的數據倉庫和DBA認爲Referen tial完整性約束效率低下,因此我們最終導致跨表的數據的數據類型定義不一致。)

我的印象是否準確?

+0

從我讀過的一些東西,實際上可以通過連接整數而不是varchar列獲得更好的性能。 :-D – DForck42 2011-05-12 14:30:50

回答

7

SQL Server中的字符串比較中會忽略尾隨空格。您自己不需要RTRIM(這會使條件無法解析)

1

Martin似乎是正確的。您可能想要測試您在數據庫中使用的特定排序規則。這裏是一些測試代碼:

DECLARE @ten_char_field char(10), 
     @ten_char_varchar varchar(10) 

SET @ten_char_field = 'ABCD' 
SET @ten_char_varchar = 'ABCD' 

SELECT @ten_char_field, CASE WHEN @ten_char_field = 'ABCD' THEN 1 ELSE 0 END, 
     @ten_char_varchar, CASE WHEN @ten_char_varchar = 'ABCD' THEN 1 ELSE 0 END 
相關問題