こんにちはパフォーマンス改善SEの松崎です。
今回はPostgreSQLのテンポラリテーブルとWITH句のメリット・デメリットについて掲載させていただきます。
WITH句(共通テーブル式: CTE)
メリット
・クエリの可読性向上
・同一クエリで複数回参照可能なため再利用性が高い
・複数のWITH句を連続使用しステップごとにデータの処理が可能
・自己参照による再帰的データ処理が可能
デメリット
・インデックスの定義が不可
・大規模テーブルでのクエリのパフォーマンス低下(マテリアライドされない場合は特に)
・大量のデータを扱う際のメモリ増加(マテリアライドされる場合)
テンポラリテーブル
メリット
・同一セッションであれば複数クエリで参照と操作が可能
・インデックスの定義が可能
デメリット
・ディスク書き込みによるI/Oコストの増加
・スキーマの定義が必要
・セッションを超えてテーブルの操作が不可
PostgreSQLでWITH句とテンポラリテーブルでどちらを使用するか迷った場合に是非参考にしてみてください。