Oracle结果集:重复列占用额外内存



在分析生成的SQL语句时,我问自己,如果结果中的一列重复,它是否会消耗不必要的内存。该框架根据需要重复了一些列。这些值是通过索引访问的,所以如果这是一个真正的问题,应该加以解决。

所以,如果你确定,请提供你对这个问题的看法。

示例:

SELECT myTable.ID, myTable.Name, myTable.ID, myTable.name FROM MyTable myTable

SELECT myTable.ID, myTable.Name FROM MyTable myTable,还是内部实现了将每一列虚拟地映射到包含实值的单个特定列?

这个问题只针对Oracle12,因为它是我们正在使用的。

没有,事实上这很容易自己测试。

SQL> create table foo(bar varchar2(4000));
Table created.
SQL> insert into foo(bar) values(rpad('x',4000,'x'));
1 row created.
SQL> commit ;
Commit complete.
SQL> set autotrace traceonly statistics
SQL> select bar from foo;
Statistics
----------------------------------------------------------
       ...
       4549  bytes sent via SQL*Net to client
SQL> select bar,bar from foo;
Statistics
----------------------------------------------------------
       ...
       8617  bytes sent via SQL*Net to client
SQL> select bar,bar,bar,bar from foo;
Statistics
----------------------------------------------------------
      ...
      16765  bytes sent via SQL*Net to client

现在,我从未见过这种情况真正重要——上面的测试非常极端。

话虽如此,Oracle确实会进行某种形式的压缩,但在某些情况下,当同一列在连续行中具有相同值时。例如

SQL> select bar from foo 
     union all select bar from foo
     union all select bar from foo;
Statistics
----------------------------------------------------------
       ...
       8608  bytes sent via SQL*Net to client

(添加bar的另一个副本只会添加几个字节。)

相关内容

  • 没有找到相关文章

最新更新