« 述語 ;) のつづき | トップページ | オプティマイザをだましちゃお! (マジック・ザ・ギャザリング風w かも) »

2012年4月28日 (土)

述語のつづきの続き。

前回の続きです。


今回の例も今ひとつといえばそうなのだけど、述語プッシュで索引が利用されることを期待した書き方なのに残念な結果になっている以下のようなパターン、意外と見かけるんですよー
オプティマイザが進化して今以上に賢くなったら気にしなくても最適化してくれるかもしれないけど………

11:28:59 SCOTT> l   
1 select
2 v1.id
3 ,v1.data
4 from
5 (
6 select
7 to_char(id) as id
8 ,data
9 from
10 push_pred_test1
11 union
12 select
13 to_char(id) as id
14 ,data
15 from
16 push_pred_test2
17 ) v1
18 where
19* v1.id = 10
11:30:40 SCOTT> /

11行が選択されました。

経過: 00:00:01.58

実行計画
----------------------------------------------------------
Plan hash value: 2712236156

------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time |
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11 | 814 | 4857 (1)| 00:00:59 |
| 1 | VIEW | | 11 | 814 | 4857 (1)| 00:00:59 |
| 2 | SORT UNIQUE | | 11 | 1166 | 4857 (91)| 00:00:59 |
| 3 | UNION-ALL | | | | | |
|* 4 | TABLE ACCESS FULL| PUSH_PRED_TEST1 | 1 | 106 | 445 (1)| 00:00:06 |
|* 5 | TABLE ACCESS FULL| PUSH_PRED_TEST2 | 10 | 1060 | 4410 (1)| 00:00:53 |
------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

4 - filter(TO_NUMBER(TO_CHAR("ID"))=10)
5 - filter(TO_NUMBER(TO_CHAR("ID"))=10)


統計
----------------------------------------------------------
0 recursive calls
0 db block gets
17554 consistent gets
15960 physical reads
0 redo size
1819 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
11 rows processed

11:30:43 SCOTT>


こんな実行計画を期待して書いたはず (^^)

11:31:49 SCOTT> l
1 select
2 to_char(v1.id) as id
3 ,v1.data
4 from
5 (
6 select
7 id
8 ,data
9 from
10 push_pred_test1
11 union
12 select
13 id
14 ,data
15 from
16 push_pred_test2
17 ) v1
18 where
19* v1.id = 10
11:31:50 SCOTT> /

11行が選択されました。

経過: 00:00:00.00

実行計画
----------------------------------------------------------
Plan hash value: 2774814350

--------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time |
--------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 11 | 715 | 8 (25)| 00:00:01 |
| 1 | VIEW | | 11 | 715 | 8 (25)| 00:00:01 |
| 2 | SORT UNIQUE | | 11 | 1166 | 8 (75)| 00:00:01 |
| 3 | UNION-ALL | | | | | |
| 4 | TABLE ACCESS BY INDEX ROWID| PUSH_PRED_TEST1 | 1 | 106 | 2 (0)| 00:00:01 |
|* 5 | INDEX UNIQUE SCAN | PK_PUSH_PRED_TEST1 | 1 | | 1 (0)| 00:00:01 |
| 6 | TABLE ACCESS BY INDEX ROWID| PUSH_PRED_TEST2 | 10 | 1060 | 4 (0)| 00:00:01 |
|* 7 | INDEX RANGE SCAN | PK_PUSH_PRED_TEST2 | 10 | | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

5 - access("ID"=10)
7 - access("ID"=10)


統計
----------------------------------------------------------
0 recursive calls
0 db block gets
7 consistent gets
0 physical reads
0 redo size
1819 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
11 rows processed

11:31:51 SCOTT>




ここまでのあらすじ

述語 ;)
述語 ;) のつづき

|

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/106341/54577849

この記事へのトラックバック一覧です: 述語のつづきの続き。:

コメント

コメントを書く