Oracle分页查询详解(三)
? ? ? ? ?创建了T表和T1表,默认情况下,HASH JOIN的效率要比NESTED LOOP高很多。如下所示:
?? ? 22233次逻辑读。
? ? ? ?187164次逻辑读。
? ? ? ? 8次逻辑读。
? ? ? ?28次逻辑读。
? ? ? ? HASH JOIN中第一步也就是第一张表的全表扫描是无法应用STOPKEY的,这就是上面提到的NESTED LOOP比HASH JOIN优势的地方。但是,这个例子中,恰好第一张表很小,对这张表的全扫描的代价极低,因此,显得HASH JOIN效率更高。但是,这不具备共性,如果两张表的大小相近,或者Oracle错误的选择了先扫描大表,则使用HASH JOIN的效率就会低得多。
? ? ? ?通过HINT提示,让Oracle先扫描大表,这回结果就很明显了。NESTED LOOP的效果要比HASH JOIN好得多。
?? ? 28次逻辑读。
? ? ? 167372次逻辑读。
其实,不仅是表连接,对于所有的分页查询都可以加上FIRST_ROWS提示。不过需要注意的时,分页查询的目标是尽快的返回前N条记录,因此,无论是ROWNUM还是FIRST_ROWS机制都是提高前几页的查询速度,对于分页查询的最后几页,采用这些机制不但无法提高查询速度,反而会明显降低查询效率,对于这一点使用者应该做到心中有数。