对于我所处的奇怪情况的奇怪问题.
选择具有29个varchar(255)列的表的所有列时,是否存在明显的性能差异?
如果它们是varchar(50)而性能会改善吗?
如果重要的话,列中的大多数数据实际上少于30个字符.
这取决于.
如果您只是在没有网络流量的PL/SQL块中查询数据,那么假设在两种情况下数据实际上都是相同的大小,则无关紧要.如果将数据提取到PL/SQL变量中,您可能会使用稍微多一点的PGA内存,但是不太可能在性能方面产生任何明显的差异.
但是,如果您要通过网络获取数据,那么它可能会产生重大影响.许多驱动程序最终会根据结果集的潜在大小来分配空间(即255个字节或255个字符,具体取决于字符集,NLS_LENGTH_SEMANTICS和其他全球化的乐趣),这可能意味着你要分配5倍以上客户端计算机上的RAM不必要(这里"客户端计算机"可能指的是三层应用程序的中间层).反过来,这最终会影响绩效.
根据您的用户名,我倾向于怀疑您使用的是Java和JDBC.如果您使用的是Type 4 JDBC驱动程序,我倾向于下注您只根据数据的实际大小来分配空间.另一方面,如果您正在使用JDBC-ODBC桥,我倾向于下注ODBC驱动程序根据列的最大大小分配空间.这显然取决于你正在使用的驱动程序 - 这是我个人受过教育的猜测,不是基于实际分析各种驱动程序的内存使用情况.