SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

使ってナットク!Oracle Database 11g最新機能

復習しておこう!Oracle Database 10gからの変更点

#7


ハッシュ・アルゴリズムによるグルーピング処理

Oracle9iまでは、Group by句を指定すると、内部的にソート処理がなされていました。そのため、ソートされた結果が戻ることを想定して、使用されていたケースもあるようです。

SQL> SELECT SUM(SAL), DEPTNO FROM EMP GROUP BY DEPTNO;

  SUM(SAL)     DEPTNO
---------- ----------
      8750         10
     10875         20
      9400         30

10g以降のリリースでは、『HASH GROUP BY集計』というハッシュ・アルゴリズムを使用したグルーピング処理が採用されるようになりました。この結果、無駄なソート処理を行うことなく効率的に集計処理を実施することができます。

SQL> SELECT SUM(SAL), DEPTNO FROM EMP GROUP BY DEPTNO;

  SUM(SAL)     DEPTNO
---------- ----------
      9400         30
     10875         20
      8750         10

レポート処理などで、ソートされていることを想定してGROUP BY句を使用していた場合は、10gへの移行後に表示順が変わってしまうので要注意です。集計結果をソートしたい場合は、ORDER BY句を明示的に指定する必要があります。

SQL> SELECT SUM(SAL), DEPTNO FROM EMP GROUP BY DEPTNO ORDER BY DEPTNO;

  SUM(SAL)     DEPTNO
---------- ----------
      8750         10
     10875         20
      9400         30

オプティマイザの実行計画も確認してみましょう。

まずは、実行計画を格納するための表『PLAN_TABLE』を作成する必要があります。utlxplan.sqlは、PLAN_TABLEを作成するためのスクリプトです。

SQL> @%ORACLE_HOME%\RDBMS\admin\utlxplan.sql

表が作成されました。

次に、『EXPLAIN PLAN』コマンドを実行して実行計画をPLAN_TABLEに格納します。FORの後に実行計画を取得したいSQL文を指定します。

SQL> EXPLAIN PLAN FOR SELECT SUM(SAL), DEPTNO FROM EMP GROUP BY DEPTNO;

解析されました。

最後に、取得した実行計画を表示します。utlxpls.sqlは、PLAN_TABLEに格納されている実行計画を見やすい形式に整形して表示してくれるスクリプトです。

SQL> @%ORACLE_HOME%\RDBMS\admin\utlxpls.sql

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 4067220884
---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     3 |    21 |     4  (25)| 00:00:01 |
|   1 |  HASH GROUP BY     |      |     3 |    21 |     4  (25)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| EMP  |    14 |    98 |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------

実行計画からハッシュ・アルゴリズムを使用してグルーピング処理を行っていることがわかります。

次のページ
スリムになったCONNECTロール

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
使ってナットク!Oracle Database 11g最新機能連載記事一覧

もっと読む

この記事の著者

白砂 丈太郎(シラスナ ジョウタロウ)

日本オラクル(株)において、データベース事業のコアテクノロジー技術およびパフォーマンス技術のリーダーを務め、製品機能の検証および大規模/最重要プロジェクトでのベンチマークや実装を担当。
現在は(株)ワン・オー・ワンにおいて、データベースとWeb技術を中心としたシステム構築およびコンサルティングに従事。...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3254 2012/02/10 17:43

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング