2013-08-17 20 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。当然,这是一个愚蠢的...呃...错字...现在已经修复了。谢谢 ;) –

相关问题