SQLで集約関数LISTAGGを使うと遅い!?


ここではORACLEデータベースのSQLで、LISTAGG関数を使うとSQLが遅くなるのか、という疑問について紹介しています。

遅いSQLや実行回数の多いSQLを確認する方法は↓で紹介していますので参考にしてください。
>>【SQL】長時間処理や遅いSQLを確認する方法
>>【SQL】実行回数の多いSQLを確認する方法

集約関数LISTAGGを使うと遅い!?

私は最近知りました、LISTAGG(笑)

どうもレスポンスが遅い画面があって、調べていました。

SQLを見ると、どうもSQLで参照しているVIEWのレスポンスが遅い。

VIEWの中身を見てみると、ありました、LISTAGG。

使い方は他の集約関数と同様に、GROUP BYと一緒に使ってください。
これを使うことで例えば

商品名 色柄
ドライヤー 黒,白,赤

↑みたいな感じで、色柄をカンマ区切りで取得する、みたいな使い方が出来ます。
結構限られた条件下ではありますが、業務アプリでは意外と使えると思います。

実装方法もとても簡単です。

ただ、少し考えれば分かりますが、
大量データを処理すればどうなるか・・・

大変遅いです。
なので、使いどころを考えましょう、と先輩に言いたい。。

最後に

最後までお読みいただきありがとうございます。

SQLのチューニング方法は↓で紹介していますので参考にしてください。
>>SELECT文のSQLチューニング方法まとめ