skillup

技術ブログ

Database

SQL結合 サブクエリに関して

投稿日:

今回はサブクエリに関してです。

もちろんSQL実践入門を読み進めています。

SQL上ではテーブル、ビュー、サブクエリというのは機能的にはそれほど変わらず主にパフォーマンスの点で違いがでてきます。

以下に簡単な特徴を述べます。

テーブル、ビュー、サブクエリの特徴

テーブル

永続的かつデータを保持する

ビュー

永続的だがデータは保持しないため、アクセスのたびにSQLが実行される

サブクエリ

非永続的なので生存期間(スコープ)がSQL文の実行中に限られる

サブクエリの問題点

ここでサブクエリの問題点を挙げておきます。

計算コストが上乗せされる

データを保持していないので、実行のたびにSELECTを実行してデータを作る必要があります。純粋にSELECT文実行にかかるコストが上乗せされます。

IOコストがかかる

計算した結果は、どこかに保持するため書き込む必要があります。うまくメモリに収まればよいですが、そうでない場合はストレージに書き込むことになり、遅延の原因になります。

最適化を受けられない

サブクエリにはインデックスが利かないため、最適化を受けることができません。

詳細はSQL実践入門の中にゆずりますが、サブクエリの中にはウィンドウ関数を使って代用できるものなどがかなり多くあります。この場合、ウィンドウ関数を使ったほうがパフォーマンスが良くなるケースがあるので積極的に利用しましょう。

-Database

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

MySQLのセキュアな設定

以前SSHの設定についていろいろ書いたんで今回はMySQLに関して。 Contents1 基本的な処方箋(MySQLに限らないかも)2 ホストのアクセスを制限する3 LOCAL INFILEコマンドを …

no image

NULLについて

「達人に学ぶSQL徹底指南書」を読み進めていきましたがNULLについていろいろ書いてあるのでメモリます。 Contents1 NULLには未知と適用不能の2パターンがある2 = NULL が使えず I …

no image

MySQL safe mode

MySQLに関してしっかりパスワードをチェックしていれば問題ありませんが、中にはrootパスワードをわすれた!なんてこともあるでしょう。 そんなときはsafe modeで実行することでrootのパスワ …

no image

postgresの外部キー制約やcascadeについて

外部キーを貼っておくと、当然、削除などを行うときにエラーになり、truncateも当然できなくなりますが、cascadeをつけることで、関連するテーブルまで一気にtruncateされます。 [cray …

no image

laravelでのredis活用

以前下記エントリーでredisの活用について書きました。 インメモリデータベース redis 一般的な使用法ですと登録できるデータはstring,list,hashのような比較的単純な形しか登録できな …

アーカイブ