SQLのWITH句について

PostgreSQLを使用した案件にてサブクエリを最大5つ使用するSQLを作成していたが条件項目が多くレスポンスでよい結果がでないこともあり、そこでWITH句を使用することにした。

WITH句

PostgreSQLのドキュメントには以下のように書かれています。
https://www.postgresql.jp/document/9.5/html/queries-with.html

簡単にいうとサブクエリに名前を付けて使用する感じになりますね。

レスポンスの計測結果ですが
サブクエリ2個の場合で1.5倍高速に、
サブクエリ5個の場合で8.2倍高速になる結果となりました。

全てのクエリでレスポンスが向上するものを保証するものではありませんので

以下のSQL例が、今回改修したSQLのおおまかな例です。

WITH句が使用できるRDBMS


https://www.postgresql.jp/document/9.5/html/queries-with.html

http://www.oracle.com/technetwork/jp/articles/otnj-sql-image7-1525406-ja.html#a
MS SQL Server
https://msdn.microsoft.com/ja-jp/library/ms175972.aspx

MySQL 5.7まではWITH句はサポートされていないようです。SQL-99で規格化されているものなんですけどねぇ
MySQLは使えないけど、MariaDBは使えるようです(SQL-99 Complete ってサイトに載ってます)。
MySQL8 ではWITH句がサポートされているらしいのですが未確認。

MariaDB
https://mariadb.com/kb/en/mariadb/with/
Amazon Redshift
http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_WITH_clause.html