Received: from maia.hub.org (maia-5.hub.org [200.46.204.29]) by mail.postgresql.org (Postfix) with ESMTP id BF6721337B4E for ; Thu, 27 Jan 2011 17:31:33 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.29]) (amavisd-maia, port 10024) with ESMTP id 18240-04 for ; Thu, 27 Jan 2011 21:31:26 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from hrndva-omtalb.mail.rr.com (hrndva-omtalb.mail.rr.com [71.74.56.124]) by mail.postgresql.org (Postfix) with ESMTP id AC88C133798E for ; Thu, 27 Jan 2011 17:31:25 -0400 (AST) X-Authority-Analysis: v=1.1 cv=UQuFHoD2CPQ248x8AXEbKhr4z9AaDqApxmEl3BhfZ64= c=1 sm=0 a=cYhYf6uZ5ZgA:10 a=8nJEP1OIZ-IA:10 a=RAii6je2cdnAH6ATCOpc6g==:17 a=_Ixf_7qHAAAA:8 a=uEgWYE3GHAYJHOtLhX8A:9 a=HFgQ0JQTs8nJtLUkR6cA:7 a=cCuvLkX_t7YqznKy2Chtd6zLTpUA:4 a=wPNLvfGTeEIA:10 a=ryAo9hy1-OkA:10 a=6vsjEBoLwlAA:10 a=0tfO7MgyNwYA:10 a=RAii6je2cdnAH6ATCOpc6g==:117 X-Cloudmark-Score: 0 X-Originating-IP: 74.73.87.196 Received: from [74.73.87.196] ([74.73.87.196:53134] helo=[192.168.1.103]) by hrndva-oedge02.mail.rr.com (envelope-from ) (ecelerity 2.2.3.46 r()) with ESMTP id 3B/01-00963-D24E14D4; Thu, 27 Jan 2011 21:31:25 +0000 Message-ID: <4D41E42C.2090702@vmsinfo.com> Date: Thu, 27 Jan 2011 16:31:24 -0500 From: Mladen Gogala User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.13) Gecko/20101207 Lightning/1.0b2 Thunderbird/3.1.7 MIME-Version: 1.0 To: Kenneth Marshall CC: Igor Neyman , Scott Marlowe , Tom Lane , David Wilson , "pgsql-performance@postgresql.org" Subject: Re: Postgres 9.0 has a bias against indexes References: <20110127212053.GL6475@aart.is.rice.edu> In-Reply-To: <20110127212053.GL6475@aart.is.rice.edu> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.9 tagged_above=-10 required=5 tests=BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001 X-Spam-Level: X-Archive-Number: 201101/298 X-Sequence-Number: 42085 On 1/27/2011 4:20 PM, Kenneth Marshall wrote: > Interesting. Can you force it to use a Seqential Scan and if so, how > does that affect the timing? i.e. Is the index scan actually faster? > > Cheers, > Ken Yes, Oracle can be forced into doing a sequential scan and it is actually faster than an index scan: SQL> set autotrace on explain SQL> with e(empno,ename,mgr,bossname,lev) as ( 2 select empno,ename,mgr,NULL,0 from emp where empno=7839 3 union all 4 select emp.empno,emp.ename,emp.mgr,e.ename,e.lev+1 5 from emp,e 6 where emp.mgr=e.empno) 7 select * from e 8 / EMPNO ENAME MGR BOSSNAME LEV ---------- ---------- ---------- ---------- ---------- 7839 KING 0 7566 JONES 7839 KING 1 7698 BLAKE 7839 KING 1 7782 CLARK 7839 KING 1 7499 ALLEN 7698 BLAKE 2 7521 WARD 7698 BLAKE 2 7654 MARTIN 7698 BLAKE 2 7788 SCOTT 7566 JONES 2 7844 TURNER 7698 BLAKE 2 7900 JAMES 7698 BLAKE 2 7902 FORD 7566 JONES 2 EMPNO ENAME MGR BOSSNAME LEV ---------- ---------- ---------- ---------- ---------- 7934 MILLER 7782 CLARK 2 7369 SMITH 7902 FORD 3 7876 ADAMS 7788 SCOTT 3 14 rows selected. Elapsed: 00:00:00.18 Execution Plan ---------------------------------------------------------- Plan hash value: 2925328376 -------------------------------------------------------------------------------- -------------------- | Id | Operation | Name | Rows | Bytes | Cos t (%CPU)| Time | -------------------------------------------------------------------------------- -------------------- | 0 | SELECT STATEMENT | | 15 | 795 | 6 (17)| 00:00:56 | | 1 | VIEW | | 15 | 795 | 6 (17)| 00:00:56 | | 2 | UNION ALL (RECURSIVE WITH) BREADTH FIRST| | | | | | | 3 | TABLE ACCESS BY INDEX ROWID | EMP | 1 | 24 | 1 (0)| 00:00:11 | |* 4 | INDEX UNIQUE SCAN | PK_EMP | 1 | | 0 (0)| 00:00:01 | |* 5 | HASH JOIN | | 14 | 798 | 5 (20)| 00:00:46 | | 6 | RECURSIVE WITH PUMP | | | | | | | 7 | TABLE ACCESS FULL | EMP | 14 | 336 | 3 (0)| 00:00:31 | -------------------------------------------------------------------------------- -------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - access("EMPNO"=7839) 5 - access("EMP"."MGR"="E"."EMPNO") Note ----- - SQL plan baseline "SQL_PLAN_1tmxjj25531vff51d791e" used for this statement SQL> SQL> with e1(empno,ename,mgr,bossname,lev) as ( 2 select /*+ full(emp) */ empno,ename,mgr,NULL,0 from emp where empno=7839 3 union all 4 select /*+ full(e2) */ 5 e2.empno,e2.ename,e2.mgr,e1.ename,e1.lev+1 6 from emp e2,e1 7 where e2.mgr=e1.empno) 8 select * from e1 9 / EMPNO ENAME MGR BOSSNAME LEV ---------- ---------- ---------- ---------- ---------- 7839 KING 0 7566 JONES 7839 KING 1 7698 BLAKE 7839 KING 1 7782 CLARK 7839 KING 1 7499 ALLEN 7698 BLAKE 2 7521 WARD 7698 BLAKE 2 7654 MARTIN 7698 BLAKE 2 7788 SCOTT 7566 JONES 2 7844 TURNER 7698 BLAKE 2 7900 JAMES 7698 BLAKE 2 7902 FORD 7566 JONES 2 EMPNO ENAME MGR BOSSNAME LEV ---------- ---------- ---------- ---------- ---------- 7934 MILLER 7782 CLARK 2 7369 SMITH 7902 FORD 3 7876 ADAMS 7788 SCOTT 3 14 rows selected. Elapsed: 00:00:00.14 Execution Plan ---------------------------------------------------------- Plan hash value: 2042363665 -------------------------------------------------------------------------------- ------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------- ------------------ | 0 | SELECT STATEMENT | | 15 | 795 | 10 (10)| 00:01:36 | | 1 | VIEW | | 15 | 795 | 10 (10)| 00:01:36 | | 2 | UNION ALL (RECURSIVE WITH) BREADTH FIRST| | | | | | |* 3 | TABLE ACCESS FULL | EMP | 1 | 24 | 3 (0)| 00:00:31 | |* 4 | HASH JOIN | | 14 | 798 | 7 (15)| 00:01:06 | | 5 | RECURSIVE WITH PUMP | | | | | | | 6 | TABLE ACCESS FULL | EMP | 14 | 336 | 3 (0)| 00:00:31 | -------------------------------------------------------------------------------- ------------------ Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("EMPNO"=7839) 4 - access("E2"."MGR"="E1"."EMPNO") SQL> spool off -- Mladen Gogala Sr. Oracle DBA 1500 Broadway New York, NY 10036 (212) 329-5251 www.vmsinfo.com