Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Union All slow with order by

487405Mar 6 2008 — edited Mar 7 2008

I have 2 queries that I do an "union all" and then an order by after the "union all" This seems to be extremely slow. But when I run the queries individually, they are really fast. Could some help me out with this please.

SELECT *
  FROM (SELECT a.*, ROWNUM rnum
          FROM (SELECT   COLS......
    FROM (((SELECT  from tables with joins)
           UNION ALL
           (SELECT from tables and view with joins))
            order by colname)
      ) a
         WHERE ROWNUM <= 500)
 WHERE rnum >= 1
 
 PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3988534528

--------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                      | Name                          | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                               |                               |   500 |  1600K|       |  3634M  (1)|999:59:59 |       |       |
|*  1 |  VIEW                                          |                               |   500 |  1600K|       |  3634M  (1)|999:59:59 |       |       |
|*  2 |   COUNT STOPKEY                                |                               |       |       |       |            |          |       |       |
|   3 |    VIEW                                        |                               |  4277K|    13G|       |  3634M  (1)|999:59:59 |       |       |
|*  4 |     SORT ORDER BY STOPKEY                      |                               |  4277K|   311M|  1095M|  3634M  (1)|999:59:59 |       |       |
|   5 |      UNION-ALL                                 |                               |       |       |       |            |          |       |       |

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|*  6 |       FILTER                                   |                               |       |       |       |            |          |       |       |
|*  7 |        HASH JOIN                               |                               |   212K|    15M|       |   153K  (1)| 00:03:37 |       |       |
|*  8 |         HASH JOIN RIGHT OUTER                  |                               |   507 | 22308 |       |     6  (17)| 00:00:01 |       |       |
|   9 |          TABLE ACCESS FULL                     | DIR  		               |   143 |  3861 |       |     2   (0)| 00:00:01 |       |       |
|  10 |          TABLE ACCESS FULL                     | USER                          |   507 |  8619 |       |     3   (0)| 00:00:01 |       |       |
|  11 |         PARTITION RANGE ITERATOR               |                               |   212K|  6645K|       |   153K  (1)| 00:03:37 |   KEY |   KEY |
|  12 |          TABLE ACCESS BY LOCAL INDEX ROWID     | FL                    	       |   212K|  6645K|       |   153K  (1)| 00:03:37 |   KEY |   KEY |
|* 13 |           INDEX RANGE SCAN                     | I_FL_ID     		       |   382K|       |       | 38943   (2)| 00:00:56 |   KEY |   KEY |
|* 14 |            COUNT STOPKEY                       |                               |       |       |       |            |          |       |       |
|* 15 |             FILTER                             |                               |       |       |       |            |          |       |       |
|  16 |              PARTITION RANGE ITERATOR          |                               |     1 |    22 |       |   856   (1)| 00:00:02 |   KEY |   KEY |

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|* 17 |               TABLE ACCESS BY LOCAL INDEX ROWID| PAY               	       |     1 |    22 |       |   856   (1)| 00:00:02 |   KEY |   KEY |
|* 18 |                INDEX RANGE SCAN                | I_PAY_FLID           	       |     1 |       |       |   855   (1)| 00:00:02 |   KEY |   KEY |
|* 19 |       FILTER                                   |                               |       |       |       |            |          |       |       |
|* 20 |        HASH JOIN RIGHT OUTER                   |                               | 25019 |  3029K|       |   138K  (1)| 00:03:17 |       |       |
|  21 |         TABLE ACCESS FULL                      | DIR                	       |   143 |  3861 |       |     2   (0)| 00:00:01 |       |       |
|* 22 |         HASH JOIN                              |                               | 25019 |  2369K|       |   138K  (1)| 00:03:17 |       |       |
|  23 |          TABLE ACCESS FULL                     | USER                          |   507 |  8619 |       |     3   (0)| 00:00:01 |       |       |
|* 24 |          HASH JOIN                             |                               | 25019 |  1954K|       |   138K  (1)| 00:03:17 |       |       |
|  25 |           INDEX FULL SCAN                      | PK_HO                         |   278 |  1112 |       |     1   (0)| 00:00:01 |       |       |
|* 26 |           HASH JOIN                            |                               | 25019 |  1856K|       |   138K  (1)| 00:03:17 |       |       |
|  27 |            INDEX FULL SCAN                     | PK_HO                         |   278 |  1112 |       |     1   (0)| 00:00:01 |       |       |

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|  28 |            NESTED LOOPS                        |                               | 25019 |  1759K|       |   138K  (1)| 00:03:17 |       |       |
|  29 |             PARTITION RANGE ITERATOR           |                               | 25018 |   830K|       | 63575   (1)| 00:01:30 |   KEY |   KEY |
|* 30 |              TABLE ACCESS BY LOCAL INDEX ROWID | PAY               	       | 25018 |   830K|       | 63575   (1)| 00:01:30 |   KEY |   KEY |
|* 31 |               INDEX RANGE SCAN                 | I_PAY_TIME_ID 		       |  1493K|       |       |  9052   (2)| 00:00:13 |   KEY |   KEY |
|* 32 |             TABLE ACCESS BY GLOBAL INDEX ROWID | FL                            |     1 |    38 |       |     3   (0)| 00:00:01 | ROWID | ROWID |
|* 33 |              INDEX UNIQUE SCAN                 | PK_FL                         |     1 |       |       |     2   (0)| 00:00:01 |       |       |
--------------------------------------------------------------------------------------------------------------------------------------------------------

  SELECT *
  FROM (SELECT a.*, ROWNUM rnum
          FROM ( SELECT  from tables with joins order by colname) a
         WHERE ROWNUM <= 500)
 WHERE rnum >= 1

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3503998222

-----------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                     | Name                    | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                              |                         |   500 |  1228K|   222K  (1)| 00:05:15 |       |       |
|*  1 |  VIEW                                         |                         |   500 |  1228K|   222K  (1)| 00:05:15 |       |       |
|*  2 |   COUNT STOPKEY                               |                         |       |       |            |          |       |       |
|   3 |    VIEW                                       |                         |   520 |  1271K|   222K  (1)| 00:05:15 |       |       |
|*  4 |     FILTER                                    |                         |       |       |            |          |       |       |
|   5 |      NESTED LOOPS OUTER                       |                         |    26 |  1976 |    54   (0)| 00:00:01 |       |       |

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   6 |       NESTED LOOPS                            |                         |    26 |  1274 |    48   (0)| 00:00:01 |       |       |
|   7 |        PARTITION RANGE ITERATOR               |                         |   212K|  6645K|    22   (0)| 00:00:01 |   KEY |   KEY |
|   8 |         TABLE ACCESS BY LOCAL INDEX ROWID     | FL                      |   212K|  6645K|    22   (0)| 00:00:01 |   KEY |   KEY |
|*  9 |          INDEX RANGE SCAN                     | I_FL_START_ID 	        |    47 |       |     8   (0)| 00:00:01 |   KEY |   KEY |
|* 10 |           COUNT STOPKEY                       |                         |       |       |            |          |       |       |
|* 11 |            FILTER                             |                         |       |       |            |          |       |       |
|  12 |             PARTITION RANGE ITERATOR          |                         |     1 |    22 |   856   (1)| 00:00:02 |   KEY |   KEY |
|* 13 |              TABLE ACCESS BY LOCAL INDEX ROWID| PAY         		|     1 |    22 |   856   (1)| 00:00:02 |   KEY |   KEY |
|* 14 |               INDEX RANGE SCAN                | I_PAY_ID     		|     1 |       |   855   (1)| 00:00:02 |   KEY |   KEY |
|  15 |        TABLE ACCESS BY INDEX ROWID            | USER                	|     1 |    17 |     1   (0)| 00:00:01 |       |       |
|* 16 |         INDEX UNIQUE SCAN                     | PK_USER             	|     1 |       |     0   (0)| 00:00:01 |       |       |

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|  17 |       TABLE ACCESS BY INDEX ROWID             | DIR          		|     1 |    27 |     1   (0)| 00:00:01 |       |       |
|* 18 |        INDEX UNIQUE SCAN                      | PK_DIR       		|     1 |       |     0   (0)| 00:00:01 |       |       |
-----------------------------------------------------------------------------------------------------------------------------------------

 
   SELECT *
  FROM (SELECT a.*, ROWNUM rnum
          FROM ( SELECT from tables and view with joins order by colname) a
         WHERE ROWNUM <= 500)
 WHERE rnum >= 1

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1786470271

---------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                   | Name                          | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
---------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                            |                               |   500 |  1600K|  1696   (1)| 00:00:03 |       |       |
|*  1 |  VIEW                                       |                               |   500 |  1600K|  1696   (1)| 00:00:03 |       |       |
|*  2 |   COUNT STOPKEY                             |                               |       |       |            |          |       |       |
|   3 |    VIEW                                     |                               |   501 |  1596K|  1696   (1)| 00:00:03 |       |       |
|*  4 |     FILTER                                  |                               |       |       |            |          |       |       |
|   5 |      NESTED LOOPS                           |                               |   501 | 60120 |  1696   (1)| 00:00:03 |       |       |

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   6 |       NESTED LOOPS                          |                               |   501 | 58116 |  1696   (1)| 00:00:03 |       |       |
|   7 |        NESTED LOOPS OUTER                   |                               |   501 | 56112 |  1695   (1)| 00:00:03 |       |       |
|   8 |         NESTED LOOPS                        |                               |   501 | 42585 |  1689   (1)| 00:00:03 |       |       |
|   9 |          NESTED LOOPS                       |                               |   501 | 34068 |  1550   (1)| 00:00:03 |       |       |
|  10 |           PARTITION RANGE ITERATOR          |                               |   829K|    23M|    42   (0)| 00:00:01 |   KEY |   KEY |
|  11 |            TABLE ACCESS BY LOCAL INDEX ROWID| PAY               	    |   829K|    23M|    42   (0)| 00:00:01 |   KEY |   KEY |
|* 12 |             INDEX RANGE SCAN                | I_PAY_TIME_ID 		    |   902 |       |     9   (0)| 00:00:01 |   KEY |   KEY |
|* 13 |           TABLE ACCESS BY GLOBAL INDEX ROWID| FL                      	    |     1 |    38 |     3   (0)| 00:00:01 | ROWID | ROWID |
|* 14 |            INDEX UNIQUE SCAN                | PK_FL                   	    |     1 |       |     2   (0)| 00:00:01 |       |       |
|  15 |          TABLE ACCESS BY INDEX ROWID        | USER                     	    |     1 |    17 |     1   (0)| 00:00:01 |       |       |
|* 16 |           INDEX UNIQUE SCAN                 | PK_USER                  	    |     1 |       |     0   (0)| 00:00:01 |       |       |

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|  17 |         TABLE ACCESS BY INDEX ROWID         | DIR         	            |     1 |    27 |     1   (0)| 00:00:01 |       |       |
|* 18 |          INDEX UNIQUE SCAN                  | PK_DIR         	            |     1 |       |     0   (0)| 00:00:01 |       |       |
|* 19 |        INDEX UNIQUE SCAN                    | PK_HO                         |     1 |     4 |     0   (0)| 00:00:01 |       |       |
|* 20 |       INDEX UNIQUE SCAN                     | PK_HO                         |     1 |     4 |     0   (0)| 00:00:01 |       |       |
---------------------------------------------------------------------------------------------------------------------------------------------
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 4 2008
Added on Mar 6 2008
3 comments
888 views