2011-10-10 35 views
1

我建模一個數據庫,我想問一下關於Varchar類型。Varchar類型和性能問題

  1. Varchar(50)和Varchar(100)之間是否有任何性能差異?

例如我得到一個varchar(50)字段和用戶保存5個char數據到該區域,另一個用戶保存25炭此field.But沒有一個保存的50個字符數據到該字段。所以我必須打開這個字段varchar(25)以獲得最佳性能?

回答

1

假設SQL Server(因爲您也列出了MySQL),沒有。

只要該字段中的數據相同,開銷也是相同的。

+1

查看Martin Smith的回答:http:// stackoverflow。com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947 – gbn

0

沒有,有沒有性能損失,如果你定義爲varchar(50)您只能存儲最多10個字符,以舉例說明。 Varchar將始終將數據存儲在行中。

0

編輯:對於MySQL:至少,除非你有一些字符串在50-100個字符之間。

通常varchars被存儲爲長度+數據;只有提供的數據被存儲。一個varchar(100)需要更多的字節長度(最大300字節,假設utf8每個字符3個字節),但這還不夠。

這些指標是一樣的。只有你真的存儲。

+0

我該如何測試?有沒有測試這個事件的工具MSSQL或MySQL? –

0

列長度應該反映用戶想要存儲在該列中的數據的最大長度。如果你的申請是根據經過充分研究的要求而設計的,那麼這個長度應該有一定的理由;僅僅是因爲沒有人在該列中存儲大於25個字符的字符串並不意味着他們不會有一天。

要回答您的問題的另一方面,減少列的長度並不會增加性能。正如文檔所述,該列僅佔用存儲空間以適應分配的數據。因此,只有25字節數據的VARCHAR(100)列不會佔用比具有相同數據的VARCHAR(25)列多的存儲空間。 Find out more


存儲是性能問題嗎?它可以是,因爲磁盤上較短的記錄等於每個I/O操作檢索到的更多記錄。