2013-05-26 51 views
2

目前,我們有一個varchar(255)字段。我們的一個用戶已經要求該字段增加10倍左右到varchar(2048)左右。鑑於他的使用情況,這似乎是一個合理的要求。顯着增加varchar字段的長度是否會影響性能?

有問題的字段沒有索引,它不是任何連接的一部分,也不會包含在where子句中。

我意識到較小的增加(比如從50到100)沒有影響,但這是否仍然保持在更大的尺寸上?

+0

有趣的問題是,爲什麼255字符字段具有2048個字符的有效用戶特定情況? –

回答

2

Apparently not with a sidenote

「在存儲方面,VARCHAR(255)是足夠聰明,只存儲你需要在一個給定行的長度,不像CHAR(255),這將永遠保存255個字符

但是,既然你用MySQL標記了這個問題,我會提到一個特定於MySQL的提示:當你的查詢隱式生成一個臨時表時,例如在排序或GROUP BY時,VARCHAR字段被轉換爲CHAR以獲得處理固定寬度的行如果你使用很多VARCHAR(255)字段的數據不需要那麼長,這可以使臨時表非常大。

最好根據您打算存儲的數據類型來定義列。當然,很難知道最長的郵政地址是什麼,這就是爲什麼很多人選擇一個比任何地址長的VARCHAR。而255是習慣,因爲它可以在天亮的時候有些數據庫是一個VARCHAR的最大長度(以及PostgreSQL的,直到最近)。」

由Bill Karwin

因此,它基本上取決於該字段特定的用戶;如果沒有與現場使用GROUP BY,那麼就沒有問題

1

對於你的情況有VARCHAR(255)和varchar(2048)之間沒有差異

在MySQL中,臨時表和MEMORY表存儲VA RCHAR列作爲固定長度列填充到其最大長度。如果你設計的VARCHAR列比你需要的最大尺寸大得多,你會消耗更多的內存。這會影響緩存效率,排序速度等。

相關問題