SQL overは、分析関数 ビッグデータの集計区間を制限しレスポンスを上げる
  • facebookページ
  • twitterページ
  • 2020.05.30

    SQL overは、分析関数 ビッグデータの集計区間を制限しレスポンスを上げる

    SQLのoverについてまとめています。

    SQL overはWindow関数(分析関数)

    overはSUMやMAXなどの集合関数と組み合わせると、適用範囲を制限することができます。overを使って適用範囲を制限した集合関数を分析関数(またはウインドウ関数)とかOLAP関数と呼びます。

    以下は、employees(社員)テーブル、dept_emp(社員・部署紐付けテーブル)、departments(部署)テーブルをjoinし、社員番号順にorder byでソートした結果に、overを使って部署の所属者数を分析関数で取得する例です。

    【関連記事】
    SQL Joinサンプル集 Joinで遅いSQLの原因を調べる方法 

    特にビッグデータを扱う場合、「データ全体のカウント数」「データ全体の最大数」などを算出しようとするとクエリの返答が返ってこなくなるほど時間がかかるんですね。そのため、範囲を区切って集計をおこなう関数が必要になってきたというわけです。

    Window関数は遅い ビッグデータ環境以外ではgroup byによる集合関数を使ったほうが速い

    Window関数は、巨大なデータを扱う際に集計範囲を区切って集計をおこなう苦肉の策のようなものです。一般的な集計クエリでは、group byを使うほうが早くなります。

    以下は、上記SQLをexplainで実行計画を確認した結果です。サブクエリなどを使わずに実行できるぶん、実行計画もシンプルです。

    際限なくデータが増えていく上、集計処理に高速さが求められる分析業務の場合、Window関数を使ってレスポンスの高速化ができるかどうか検討してみると良いでしょう。

    まとめ

    ポテパンダの一言メモ
    • overは分析関数(window関数)を扱うSQLコード
    • 分析関数を使うと集計範囲を区切ることができ、巨大データの集計に対するレスポンスを改善することが可能
    • 一般的なデータサイズでは、サブクエリやgroup byによる集計関数を使った方が速いケースもある


    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE