2013-08-17 80 views
2

我有一個MySQL數據庫,我想知道varchar大小對我查詢性能的影響。varchar的後果是什麼?

例如,在性能或數據庫大小方面,varchar(10)varchar(50)之間的區別是什麼。

如果我有10000行這樣的東西,它會影響很多表演還是微不足道的?

注:我沒有做任何加入此列(如果這是很重要的)

+0

未對該列進行連接可能是等式的一部分。我的經驗是幾行(10,000),varchar的大小几乎沒有影響。更重要的是肯定會有好的指數。 –

+0

@Tagazok。 。 。性能取決於是否填充了字符位置11-50。如果數據相同,性能不應受最大尺寸(對於小於256的兩種尺寸)的影響。 –

回答

4

varchar(10)意味着允許的最大字節數爲10,varchar(50)意味着允許的最大字節數爲50。基本上,一個varchar (10)與varchar(128)在磁盤方面沒有區別。因此,無論以何種方式聲明列,它都不會在存儲結束時發揮作用。但是在進行查詢時肯定會有所作爲。

source

值在VARCHAR列是可變長度的字符串。在5.0.3和更高版本中,長度可以是 ,指定爲MySQL 5.0.3之前的0到255和0到 65,535之間的值。 MySQL 5.0.3及更高版本中的VARCHAR的有效最大長度受制於最大行大小 (65,535字節,它在所有列中共享)和使用的字符集 。

+0

好吧,考慮到這一欄沒有加入,如果我存儲一個長字符串而不是一個短字符串,在性能方面是否存在差異?我想知道是否應該存儲類似「tsk_put」或「task_updated」(這是一個存儲通知的表)。此外,在某些情況下,它將超過10000行... – Olivier

2

VARCHAR(10)VARCHAR(50)之間的表現不應有任何實質性差異。

實際區別在於CHARVARCHAR之間。

http://dev.mysql.com/doc/refman/5.0/en/char.html

CHAR列的長度被固定爲在創建表聲明 長度。長度可以是0到255之間的任何值。 當存儲CHAR值時,它們用指定長度的空格填充空格。當檢索到CHAR值時,刪除尾部空格 。

VARCHAR列中的值是可變長度的字符串。在5.0.3和更高版本中,長度可以是 ,指定爲MySQL 5.0.3之前的0到255和0到 65,535之間的值。 MySQL 5.0.3及更高版本中的VARCHAR的有效最大長度受制於最大行大小 (65,535字節,它在所有列中共享)和使用的字符集 。參見第E.7.4節「表列數量限制和行數 大小」。


通過CHAR更換VARCHAR可能改善演出,從此,行將有固定的大小,從而減少碎片並以某種方式優化磁盤的訪問。這就是說,如果你只有10000行,我懷疑你會看到任何真正的差異,除非可能如果你有不尋常的「長」行。

+0

*「VARCHAR(10)和VARCHAR(50)之間的性能應該有任何實際差異。」* - 不應該是:* 「有**不應該有任何真正的區別...」* –

+0

@PetrR。當然,這是一個愚蠢的...呃...錯字...現在已經修復了。謝謝 ;) –

相關問題