Re: [long post] Re: exists or limit
Date: Fri, 11 Jul 2008 15:19:12 GMT
Message-ID: <QRKdk.10$6O4.4@trnddc06>
"Hugo" <hugo_at_nospam.invalid> wrote in message
news:48775338$0$6991$426a74cc_at_news.free.fr...
> gym dot scuba dot kennedy at gmail wrote:
>
>> We would need to see the explain plan.(at the very least) If it is set
>> up
>> correctly like it shouldn't take anywhere near 3 seconds. So the
>> question
>> is where is it spending its time?
>
> Here we go:
>
> ======================================================================
> *Query A (select xxx from yyy where zzz)
>
> PLAN_TABLE_OUTPUT
>
> -----------------------------------------------------------------------------------------------------
>
> Plan hash value: 143475067
>
>
>
> -----------------------------------------------------------------------------------------------------
>
> | Id | Operation | Name | Rows |
> Bytes | Cost (%CPU)| Time |
> -----------------------------------------------------------------------------------------------------
>
> | 0 | SELECT STATEMENT | | 1 |
> 46 | 95 (3)| 00:00:02 |
> |* 1 | HASH JOIN | | 1 |
> 46 | 95 (3)| 00:00:02 |
> | 2 | NESTED LOOPS | | 249 |
> 8466 | 12 (9)| 00:00:01 |
> | 3 | NESTED LOOPS | | 247 |
> 7163 | 12 (9)| 00:00:01 |
> | 4 | NESTED LOOPS | | 2 |
> 38 | 5 (20)| 00:00:01 |
> | 5 | NESTED LOOPS | | 1 |
> 10 | 3 (34)| 00:00:01 |
> | 6 | SORT UNIQUE | | 1 |
> 6 | 2 (0)| 00:00:01 |
> |* 7 | INDEX RANGE SCAN | SYS_C0020601 | 1 |
> 6 | 2 (0)| 00:00:01 |
> |* 8 | INDEX UNIQUE SCAN | SYS_C0020595 | 1 |
> 4 | 0 (0)| 00:00:01 |
> | 9 | TABLE ACCESS BY INDEX ROWID| KNOWLEDGESET | 4 |
> 36 | 2 (0)| 00:00:01 |
> |* 10 | INDEX RANGE SCAN | DOCUMENTIDX | 4 |
> | 1 (0)| 00:00:01 |
> | 11 | TABLE ACCESS BY INDEX ROWID | POSITIONEDELEMENT | 116 |
> 1160 | 5 (0)| 00:00:01 |
> |* 12 | INDEX RANGE SCAN | KSIDX | 335 |
> | 2 (0)| 00:00:01 |
> |* 13 | INDEX UNIQUE SCAN | SYS_C0020605 | 1 |
> 5 | 0 (0)| 00:00:01 |
> | 14 | TABLE ACCESS BY INDEX ROWID | ENTITYHIERARCHY | 697 |
> 8364 | 82 (0)| 00:00:01 |
> |* 15 | INDEX RANGE SCAN | FULLHIERARCHYIDX | 697 |
> | 5 (0)| 00:00:01 |
> -----------------------------------------------------------------------------------------------------
>
>
>
> Predicate Information (identified by operation id):
>
> ---------------------------------------------------
>
>
>
> 1 - access("PARENTENTI8_"."UIDENTITY"="ENTITY7_"."UIDENTITY")
>
> 7 - access("IDDOCUMENTLIST"=115)
>
> 8 - access("DOCUMENT4_"."IDDOCUMENT"="IDDOCUMENT")
>
> 10 - access("KNOWLEDGES5_"."IDDOCUMENT"="DOCUMENT4_"."IDDOCUMENT")
>
> 12 -
> access("POSITIONED6_"."IDKNOWLEDGESET"="KNOWLEDGES5_"."KNOWLEDGESET")
>
> 13 - access("POSITIONED6_"."UIDENTITY"="ENTITY7_"."UIDENTITY")
>
> 15 - access("PARENTENTI8_"."IDPARENTENTITY"=41 AND
> "PARENTENTI8_"."DEPTH">0)
>
>
> =======================================================================
> *Query B (select 1 from dual where exists (select 1 from yyy where zzz))
>
> PLAN_TABLE_OUTPUT
>
> ------------------------------------------------------------------------------------------------------------
>
> Plan hash value: 1543062091
>
>
>
> ------------------------------------------------------------------------------------------------------
>
> | Id | Operation | Name | Rows |
> Bytes | Cost (%CPU)| Time |
> ------------------------------------------------------------------------------------------------------
>
> | 0 | SELECT STATEMENT | | 1 |
> | 96 (2)| 00:00:02 |
> |* 1 | FILTER | | |
> | | |
> | 2 | FAST DUAL | | 1 |
> | 2 (0)| 00:00:01 |
> |* 3 | HASH JOIN | | 1 |
> 46 | 94 (2)| 00:00:02 |
> | 4 | NESTED LOOPS | | 249 |
> 8466 | 11 (0)| 00:00:01 |
> | 5 | NESTED LOOPS | | 247 |
> 7163 | 11 (0)| 00:00:01 |
> | 6 | NESTED LOOPS | | 2 |
> 38 | 4 (0)| 00:00:01 |
> | 7 | NESTED LOOPS | | 1 |
> 10 | 2 (0)| 00:00:01 |
> |* 8 | INDEX RANGE SCAN | SYS_C0020601 | 1 |
> 6 | 2 (0)| 00:00:01 |
> |* 9 | INDEX UNIQUE SCAN | SYS_C0020595 | 1 |
> 4 | 0 (0)| 00:00:01 |
> | 10 | TABLE ACCESS BY INDEX ROWID| KNOWLEDGESET | 4 |
> 36 | 2 (0)| 00:00:01 |
> |* 11 | INDEX RANGE SCAN | DOCUMENTIDX | 4 |
> | 1 (0)| 00:00:01 |
> | 12 | TABLE ACCESS BY INDEX ROWID | POSITIONEDELEMENT | 116 |
> 1160 | 5 (0)| 00:00:01 |
> |* 13 | INDEX RANGE SCAN | KSIDX | 335 |
> | 2 (0)| 00:00:01 |
> |* 14 | INDEX UNIQUE SCAN | SYS_C0020605 | 1 |
> 5 | 0 (0)| 00:00:01 |
> | 15 | TABLE ACCESS BY INDEX ROWID | ENTITYHIERARCHY | 697 |
> 8364 | 82 (0)| 00:00:01 |
> |* 16 | INDEX RANGE SCAN | FULLHIERARCHYIDX | 697 |
> | 5 (0)| 00:00:01 |
> ------------------------------------------------------------------------------------------------------
>
>
>
> Predicate Information (identified by operation id):
>
> ---------------------------------------------------
>
>
>
> 1 - filter( EXISTS (SELECT /*+ */ 0 FROM "ENTITYHIERARCHY"
> "PARENTENTI8_","ENTITY"
> "ENTITY7_","POSITIONEDELEMENT"
> "POSITIONED6_","KNOWLEDGESET" "KNOWLEDGES5_","DOCUMENT"
> "DOCUMENT4_","DOCUMENTLISTCONTENT" "DOCUMENTLISTCONTENT"
> WHERE "IDDOCUMENTLIST"=115 AND
> "DOCUMENT4_"."IDDOCUMENT"="IDDOCUMENT" AND
> "KNOWLEDGES5_"."IDDOCUMENT"="DOCUMENT4_"."IDDOCUMEN
> T" AND
> "POSITIONED6_"."IDKNOWLEDGESET"="KNOWLEDGES5_"."KNOWLEDGESET" AND
>
> "POSITIONED6_"."UIDENTITY"="ENTITY7_"."UIDENTITY" AND
> "PARENTENTI8_"."DEPTH">0 AND
> "PARENTENTI8_"."IDPARENTENTITY"=41 AND
> "PARENTENTI8_"."UIDENTITY"="ENTITY7_"."UIDENTITY"))
> 3 - access("PARENTENTI8_"."UIDENTITY"="ENTITY7_"."UIDENTITY")
>
> 8 - access("IDDOCUMENTLIST"=115)
>
> 9 - access("DOCUMENT4_"."IDDOCUMENT"="IDDOCUMENT")
>
> 11 - access("KNOWLEDGES5_"."IDDOCUMENT"="DOCUMENT4_"."IDDOCUMENT")
>
> 13 -
> access("POSITIONED6_"."IDKNOWLEDGESET"="KNOWLEDGES5_"."KNOWLEDGESET")
>
> 14 - access("POSITIONED6_"."UIDENTITY"="ENTITY7_"."UIDENTITY")
>
> 16 - access("PARENTENTI8_"."IDPARENTENTITY"=41 AND
> "PARENTENTI8_"."DEPTH">0)
>
>
> =======================================================================
> *Query C (select xxx from yyy where zzz and rownum = 1)
> ------------------------------------------------------------------------------------------------------
>
> | Id | Operation | Name | Rows |
> Bytes | Cost (%CPU)| Time |
> ------------------------------------------------------------------------------------------------------
>
> | 0 | SELECT STATEMENT | | 1 |
> 46 | 95 (3)| 00:00:02 |
> |* 1 | COUNT STOPKEY | | |
> | | |
> |* 2 | HASH JOIN | | 1 |
> 46 | 95 (3)| 00:00:02 |
> | 3 | NESTED LOOPS | | 249 |
> 8466 | 12 (9)| 00:00:01 |
> | 4 | NESTED LOOPS | | 247 |
> 7163 | 12 (9)| 00:00:01 |
> | 5 | NESTED LOOPS | | 2 |
> 38 | 5 (20)| 00:00:01 |
> | 6 | NESTED LOOPS | | 1 |
> 10 | 3 (34)| 00:00:01 |
> | 7 | SORT UNIQUE | | 1 |
> 6 | 2 (0)| 00:00:01 |
> |* 8 | INDEX RANGE SCAN | SYS_C0020601 | 1 |
> 6 | 2 (0)| 00:00:01 |
> |* 9 | INDEX UNIQUE SCAN | SYS_C0020595 | 1 |
> 4 | 0 (0)| 00:00:01 |
> | 10 | TABLE ACCESS BY INDEX ROWID| KNOWLEDGESET | 4 |
> 36 | 2 (0)| 00:00:01 |
> |* 11 | INDEX RANGE SCAN | DOCUMENTIDX | 4 |
> | 1 (0)| 00:00:01 |
> | 12 | TABLE ACCESS BY INDEX ROWID | POSITIONEDELEMENT | 116 |
> 1160 | 5 (0)| 00:00:01 |
> |* 13 | INDEX RANGE SCAN | KSIDX | 335 |
> | 2 (0)| 00:00:01 |
> |* 14 | INDEX UNIQUE SCAN | SYS_C0020605 | 1 |
> 5 | 0 (0)| 00:00:01 |
> | 15 | TABLE ACCESS BY INDEX ROWID | ENTITYHIERARCHY | 697 |
> 8364 | 82 (0)| 00:00:01 |
> |* 16 | INDEX RANGE SCAN | FULLHIERARCHYIDX | 697 |
> | 5 (0)| 00:00:01 |
> ------------------------------------------------------------------------------------------------------
>
>
>
> Predicate Information (identified by operation id):
>
> ---------------------------------------------------
>
>
>
> 1 - filter(ROWNUM=1)
>
> 2 - access("PARENTENTI8_"."UIDENTITY"="ENTITY7_"."UIDENTITY")
>
> 8 - access("IDDOCUMENTLIST"=115)
>
> 9 - access("DOCUMENT4_"."IDDOCUMENT"="IDDOCUMENT")
>
> 11 - access("KNOWLEDGES5_"."IDDOCUMENT"="DOCUMENT4_"."IDDOCUMENT")
>
> 13 -
> access("POSITIONED6_"."IDKNOWLEDGESET"="KNOWLEDGES5_"."KNOWLEDGESET")
>
> 14 - access("POSITIONED6_"."UIDENTITY"="ENTITY7_"."UIDENTITY")
>
> 16 - access("PARENTENTI8_"."IDPARENTENTITY"=41 AND
> "PARENTENTI8_"."DEPTH">0)
>
>
> As a closing remarks, why I really don't understand is that query B is
> really fast on a tiny corpus (2 docs), but slower on a bigger corpus
> (2000 docs). If exists really stop at the first matching line, it should
> be as fast in both cases (assuming a matching line could be found in
> almost every document).
>
> --
> Hugo
Please post the actual SQL statements not the summary. Also identify any
indexes (unique or not) Do the row counts in the query look approx correct?
When was the lat time you ran analyze against the tables and indexes? Which
version is this?(of Oracle)
Jim
Received on Fri Jul 11 2008 - 10:19:12 CDT