奇怪的问题表现表的一个奇怪的情况我很英寸29分Oracle的VARCHAR2列
有选择具有29 VARCHAR(255)列的表的所有列在任何noticable性能差异?
如果改为varchar(50),性能是否会提高?
如果有问题,列中的大部分数据实际上少于30个字符。
奇怪的问题表现表的一个奇怪的情况我很英寸29分Oracle的VARCHAR2列
有选择具有29 VARCHAR(255)列的表的所有列在任何noticable性能差异?
如果改为varchar(50),性能是否会提高?
如果有问题,列中的大部分数据实际上少于30个字符。
这取决于。
如果您只是在没有网络流量的PL/SQL块中查询数据,假设两种情况下的数据实际上都是相同的大小,这应该没有关系。如果您将数据提取到PL/SQL变量中,您可能会使用略微更多的PGA内存,但它不太可能会在性能上产生显着差异。
但是,如果您要通过网络获取数据,它可能会有所作为。许多驱动程序最终会根据结果集的潜在大小(即255个字节或255个字符(取决于字符集,NLS_LENGTH_SEMANTICS和其他全球化乐趣)分配空间,这可能意味着您将分配5次以上客户端机器上的RAM超过必要(这里的“客户端机器”可能指的是三层应用程序的中间层)。这反过来最终会影响业绩。
根据您的用户名,我倾向于怀疑您使用的是Java和JDBC。如果您使用的是Type 4 JDBC驱动程序,我倾向于打赌,您只会根据数据的实际大小来分配空间。另一方面,如果您使用的是JDBC-ODBC桥,我倾向于认为ODBC驱动程序正在根据列的最大大小分配空间。这显然取决于你使用的驱动程序 - 这是我个人受过教育的猜测,不是基于实际分析各种驱动程序的内存使用情况。
谢谢。今天我了解了JDBC驱动程序类型。祸是我。 :〜(看看我的jdbc jar,我推断它是4型的!jar名为ojdbc14-10.1.3.3.jar。我也得到了@ awrrpt.sql工作,它像砖块一样击中了我 - 很有用但我是我不知道它的大部分意思是什么!为什么!!! – JavaRocky 2011-03-23 01:01:39
是的,我使用类型4从我的jdbc url,它已经很薄。 – JavaRocky 2011-03-23 01:05:48