カテゴリー:SQL
-
【SQL】「結合」と「相関サブクエリ」の使い分け
11.14
結論 基本的に「結合」を記述できるのであれば、「結合」を使うのが良い。 理由としては、相関サブクエリをスカラサブクエリとして使うと、結果行数の数だけ相関サブクエリを実行することになるため、かなり高コストな処理になるからです。 相関…
-
【SQL】「サブクエリ 」の利点
11.14
サブクエリ はパフォーマンス面において不利な点が多いです。 ただ、結合が関係するクエリにおいては性能面でサブクエリを使っていくというのも選択肢の一つになってきます。 例えば、以下のような二つの例があるとします。 joinを先に…
-
【SQL】「サブクエリ 」の問題点
11.14
サブクエリ の問題点 サブクエリ の計算コストが上乗せされる。 サブクエリ はテーブルと違って実体のデータを保持していないので、アクセスするたびにSELECT文が発行されて計算コストがかかります。サブクエリ の中身が複雑であればあるほど…
-
【SQL】「実行計画変動リスク」について
11.13
実行計画はオプティマイザによって常に変動します。 最も変動しやすいのが複数の選択アルゴリズムを持っている「結合処理」になります。(なお、MySQLはネステッドループしかないので結合の実行計画変動影響は低いです。) 具体的には、リ…
-
SELECTで情報を取得して、ループの中で単純なINSERT文を何度も呼び出すみたいな処理を書いた経験は誰でもあるのではないでしょうか?これは非常に分かりやすい書き方なのでよく採用されますが、いくつかの問題点を含んでいます。 問題点 パ…
-
範囲を集計する SELECT句のCASE式で範囲を指定していただき、それをGROUP BYで指定すれば範囲での集計をすることが可能です。これを「パーテーションカット」と呼びます。 書き方 ただ、この書き方はシンプルなのですが、標準違反…
-
「WHERE + OR」と「UNION」は同値になります。 であれば、どちらを使った方が良いでしょうか。 WHERE + OR ORを使ってしまうとインデックスが使われません。 ただ、テーブルへのアクセス回数を減らす…
-
UNION 結合結果で重複があった場合は、重複を排除する。 UNION ALL 結合結果で重複があった場合は、重複を排除せず全て表示する。 UNIONに比べると無駄なソートが発生しないので、完全に排他になっているもの同士をくっつ…
-
アンチパターン例 以下のようにwhere句の条件だけ少し変えてUNIONでくっつけてデータを取得するSQLをやってしまいがちになります。 [crayon-64288be9a836d750113248/] 使いたくなるケース 「条件A…
-
multirow insert(バルクインサート) 複数のINSERT文を一括実行できる機能です。 構文 [crayon-64288be9a86b4289925593/] メリット パフォーマンスが良い。 デメリット…