假如我有一张表create table test(id number,content char(1024));
那么在执行select id,content from test order by id;时,排序区里是仅仅放id字段呢还是把id,content都放进去?
如果仅放id,那么查处来的临时结果content中的内容会放到哪里?对id排过序之后还需要将id和无序的content对应起来,岂不是很消耗资源?如果把id,content都放进去,那么content也太占内存了吧。(感觉不会是这样)

解决方案 »

  1.   

    我的看法是,在你在id中创建了一个索引之后,系统会默认创建一个id的索引段用来存储索引的,而这些记录索引与content是相映射的.并通过一个父级节点与子级节点相并联,当进行一个查询语句时,系统会先在索引中也就是id 的那个索引段查找对应条件的纪录,然后再映射到相应的子节点,找到了相应的记录.在执行查询的过程中,如果不用索引,系统是以堆栈形式来查找记录,反应时间遍及整个表的记录.而用了索引后,反应的时间就是遍及对id索引段的排序查找.
      

  2.   

    排序区中应该只有ID,然后通过ID查询对应的记录,这样不见的要影响到效能,具体要看ORACLE的实现机制了。
      

  3.   

    那么,你就不用管很多了,oracle 系统会自动优化查询语句,至于你想提高查询性能嘛,你可以增加
    索引,如果你不想加索引,那么你就优化一下temp 排序区了; 也可以增加一些库缓存。再者,如果你
    真觉得content内存占太大了,你就把pl/sql语句块从内存中钉出来。但我还是觉得建索引最好。
      

  4.   

    当然,这个是按字段来占用排序内容的.你可以通过v$pgastat来观察,一个和多个字段排序时的区别.