« いん!、イン!、Index どっぷり Inde Only Access生活w - Oracle OpenWorld Unconference presented by JPOUG | トップページ | 述語 ;) のつづき »

2012年4月25日 (水)

述語 ;)

書こうと思っているうちに時間がなくて書けなかったので、簡単なチューニングネタを一つ。


こんな感じのクエリ、どうやったら、いい感じにチューニングできるんでしょうね?

ちなみに、index only accessにする必要はないです。 やってもいいけどw

(いろいろ端折りすぎたらお題のクエリイマイチw ま、いいっか)

・準備 - 以下のような表を作って、データを登録しておきます。

22:33:20 SCOTT> create table push_pred_tab1 (id number not null, data varchar2(500)) nologging;

表が作成されました。

経過: 00:00:00.02
22:33:53 SCOTT> begin for i in 1..100000 loop insert into push_pred_tab1 values(i,lpad(i,500,'*')); end loop; commit; end;
22:36:30 2 /

PL/SQLプロシージャが正常に完了しました。

経過: 00:00:04.17
22:38:03 SCOTT> alter table push_pred_tab1 add constraint pk_push_pred_tab1 primary key(id) using index nologging;

表が変更されました。

経過: 00:00:00.18
22:38:28 SCOTT>
22:47:55 SCOTT> exec
dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'PUSH_PRED_TAB1',no_invalidate=>false,cascade=>true);

PL/SQLプロシージャが正常に完了しました。

経過: 00:00:00.31

SQL文と実行計画は以下の通りで、以下のSQL文、どうやったらいい感じにチューニングできるでしょうか?

22:52:28 SCOTT> set autot trace exp stat
22:52:34 SCOTT>
22:52:35 SCOTT>
22:52:35 SCOTT> l
1 select
2 t1.id
3 ,t1.data
4 ,t1.ctr
5 from
6 (
7 select
8 to_char(t0.id) as id
9 ,data
10 ,count(1) as ctr
11 from
12 push_pred_tab1 t0
13 group by
14 t0.id
15 ,t0.data
16 ) t1
17 where
18 t1.id between 1 and 20
19 order by
20* t1.id
22:52:38 SCOTT> /

20行が選択されました。

経過: 00:00:00.07

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

--------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time |
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 250 | 123K| 1950 (1)| 00:00:24 |
| 1 | SORT ORDER BY | | 250 | 123K| 1950 (1)| 00:00:24 |
| 2 | HASH GROUP BY | | 250 | 123K| 1950 (1)| 00:00:24 |
|* 3 | TABLE ACCESS FULL| PUSH_PRED_TAB1 | 250 | 123K| 1948 (1)| 00:00:24 |
--------------------------------------------------------------------------------------------

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

3 - filter(TO_NUMBER(TO_CHAR("T0"."ID"))>=1 AND
TO_NUMBER(TO_CHAR("T0"."ID"))<=20)


統計
----------------------------------------------------------
1 recursive calls
0 db block gets
7184 consistent gets
0 physical reads
0 redo size
11132 bytes sent via SQL*Net to client
530 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
20 rows processed

次回へつづく :)

|

トラックバック

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

この記事へのトラックバック一覧です: 述語 ;):

コメント

コメントを書く