ORACLE 内存表--table函数
时间:2010-11-22 来源:x-i-x
表函数可接受查询语句或游标作为输入参数,并可输出多行数据。该函数可以平行执行,并可持续输出数据流,被称作管道式输出。应用表函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表
对于物理表,它的数据是存储在物理磁盘上的。但数据第一次read时,会被load到db cache中去。根据LRU算法来决定这些数据是否会被置换出内存(如果建表时使用了cache,则会一直存储在内存中)。我们这主要是考虑这些数据在内存中被扫描。由于它的数据是会被所有会话共享的,所以就会存在锁和脏数据的问题。而由于它的数据是结构化的,所以在内存中进行数据扫描时,效率是最高的。
对于临时表,它及它的索引都是创建在临时表空间上的。当在一个会话中第一次插入数据时,才开始在用户的默认临时表空间给他分配临时段,不同的会话会分配不同的临时段。这就决定的了各个会话的同一个临时表的数据不会相互影响。临时表的数据也是结构化的。第一次读取数据后,数据也被cache到db cache中。
此外,在建表时可以通过参数指定它是事物级的还是会话级的,但是对查询效率来说是没什么影响的。还有一点,临时表的数据变化是不会产生redo log的(但会产生undo log),当然,这对查询效率也没有影响,致使顺带提一下。
TABLE函数(它是9i中的新特性),实际上是将一个存储在内存中的对象(以流的方式存储的)结构化以后,使这个对象能以表的方式查询。他对流对象的结构化转换就决定的它的效率大大逊于对普通表和临时表的查询效率 相关阅读 更多 +