我建模一個數據庫,我想問一下關於Varchar類型。Varchar類型和性能問題
- Varchar(50)和Varchar(100)之間是否有任何性能差異?
例如我得到一個varchar(50)字段和用戶保存5個char數據到該區域,另一個用戶保存25炭此field.But沒有一個保存的50個字符數據到該字段。所以我必須打開這個字段varchar(25)以獲得最佳性能?
我建模一個數據庫,我想問一下關於Varchar類型。Varchar類型和性能問題
例如我得到一個varchar(50)字段和用戶保存5個char數據到該區域,另一個用戶保存25炭此field.But沒有一個保存的50個字符數據到該字段。所以我必須打開這個字段varchar(25)以獲得最佳性能?
假設SQL Server
(因爲您也列出了MySQL
),沒有。
只要該字段中的數據相同,開銷也是相同的。
對於最實現可能有VARCHAR(50)
和VARCHAR(25)
之間的無關緊要性能差異;可能不值得擔心。
作爲一個經驗法則,使該領域儘可能大,你會想你會想要使用。
下面是一些相關的討論:
What are the optimum varchar sizes for MySQL?
從這個討論,這裏是有關MySQL手冊頁:
http://dev.mysql.com/doc/refman/5.0/en/char.html
沒有,有沒有性能損失,如果你定義爲varchar(50)您只能存儲最多10個字符,以舉例說明。 Varchar將始終將數據存儲在行中。
編輯:對於MySQL:至少,除非你有一些字符串在50-100個字符之間。
通常varchars被存儲爲長度+數據;只有提供的數據被存儲。一個varchar(100)需要更多的字節長度(最大300字節,假設utf8每個字符3個字節),但這還不夠。
這些指標是一樣的。只有你真的存儲。
我該如何測試?有沒有測試這個事件的工具MSSQL或MySQL? –
列長度應該反映用戶想要存儲在該列中的數據的最大長度。如果你的申請是根據經過充分研究的要求而設計的,那麼這個長度應該有一定的理由;僅僅是因爲沒有人在該列中存儲大於25個字符的字符串而並不意味着他們不會有一天。
要回答您的問題的另一方面,減少列的長度並不會增加性能。正如文檔所述,該列僅佔用存儲空間以適應分配的數據。因此,只有25字節數據的VARCHAR(100)列不會佔用比具有相同數據的VARCHAR(25)列多的存儲空間。 Find out more。
存儲是性能問題嗎?它可以是,因爲磁盤上較短的記錄等於每個I/O操作檢索到的更多記錄。
查看Martin Smith的回答:http:// stackoverflow。com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947 – gbn