> I'm fairly certain that Oracle uses row level nested loop joins when tables are indexes. > However, does it do 'block' level nested loop joins to improve performance when > tables are not indexed. I do not know how to test for this. Try this test: create table t1(a, b) as select rownum, cast('x' as char(1000)) from sys.obj$ where rownum <=50; create table t2(a, b) as select rownum, cast('x' as char(1000)) from sys.obj$ where rownum <=500; --create index i1 on t1(a); --create index i2 on t2(a); analyze table t1 compute statistics; analyze table t2 compute statistics; select table_name, blocks from user_tables where table_name in ('T1', 'T2'); set autot trace exp stat select /*+ USE_NL(t1, t2) */ t1.*, t2.* from t1, t2 where t1.a = t2.a; set autot off You see from consistent gets that all of the blocks in T2 are opened 50 times (total LIOs = the amount of rows in T1 * blocks in T2 + some overhead). At least this experiment shows that there is no block prefetching or row caching used and all joining is done row-by-row. About indexed NL joins and prefetching, uncomment the above create index clauses one by one and see the results then (there was a quite interesting thread about index prefetching in NL joins couple of months ago here..) Tanel. ---------------------------------------------------------------- Please see the official ORACLE-L FAQ: http://www.orafaq.com ---------------------------------------------------------------- To unsubscribe send email to: oracle-l-request@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //www.freelists.org/help/fom-serve/cache/1.html -----------------------------------------------------------------