2011-03-22 54 views
1

奇怪的问题表现表的一个奇怪的情况我很英寸29分Oracle的VARCHAR2列

有选择具有29 VARCHAR(255)列的表的所有列在任何noticable性能差异?

如果改为varchar(50),性能是否会提高?

如果有问题,列中的大部分数据实际上少于30个字符。

回答

5

这取决于。

如果您只是在没有网络流量的PL/SQL块中查询数据,假设两种情况下的数据实际上都是相同的大小,这应该没有关系。如果您将数据提取到PL/SQL变量中,您可能会使用略微更多的PGA内存,但它不太可能会在性能上产生显着差异。

但是,如果您要通过网络获取数据,它可能会有所作为。许多驱动程序最终会根据结果集的潜在大小(即255个字节或255个字符(取决于字符集,NLS_LENGTH_SEMANTICS和其他全球化乐趣)分配空间,这可能意味着您将分配5次以上客户端机器上的RAM超过必要(这里的“客户端机器”可能指的是三层应用程序的中间层)。这反过来最终会影响业绩。

根据您的用户名,我倾向于怀疑您使用的是Java和JDBC。如果您使用的是Type 4 JDBC驱动程序,我倾向于打赌,您只会根据数据的实际大小来分配空间。另一方面,如果您使用的是JDBC-ODBC桥,我倾向于认为ODBC驱动程序正在根据列的最大大小分配空间。这显然取决于你使用的驱动程序 - 这是我个人受过教育的猜测,不是基于实际分析各种驱动程序的内存使用情况。

+0

谢谢。今天我了解了JDBC驱动程序类型。祸是我。 :〜(看看我的jdbc jar,我推断它是4型的!jar名为ojdbc14-10.1.3.3.jar。我也得到了@ awrrpt.sql工作,它像砖块一样击中了我 - 很有用但我是我不知道它的大部分意思是什么!为什么!!! – JavaRocky 2011-03-23 01:01:39

+0

是的,我使用类型4从我的jdbc url,它已经很薄。 – JavaRocky 2011-03-23 01:05:48

1

29列30个字符每行少于1kB。在很多情况下,您可能会在数据库中产生1kB行,并且不会遇到性能问题。

由于性能上存储在varchar列,而不是最大大小的列的,性能不会通过缩短柱提高的数据量基(除非你而这样做截断数据) 。

+0

如果它们是varchar(50),性能是否会提高?我已经更新了这个问题。 – JavaRocky 2011-03-23 00:01:08

+1

@JavaRocky:我编辑了我的回答,表明表现不会改变。 – Gabe 2011-03-23 00:12:36

相关问题