人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLの相関副問い合わせについての質問です。

一般的にプログラム内で使用するSELECT文にアスタリスクは使用しませんが
EXISTSを使用したサブクエリの場合はどうなんでしょうか?
EXISTSのサンプルには、サブクエリ内に 大抵SELECT * が使われているようです。

EXISTSを使ったサブクエリ内で * を使う場合、使わない場合でのメリットデメリットを教えてください。

よろしくお願いします。

●質問者: yc24
●カテゴリ:コンピュータ
✍キーワード:SELECT SQL アスタリスク クエリ プログラム
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● sirotugu40
●27ポイント

>EXISTSのサンプルには、サブクエリ内に 大抵SELECT * が使われているようです。


EXISTSの場合は、レコードのチェックをするだけで実際にはデータを読み込まないので

*でもそうでなくても同じです。

http://q.hatena.ne.jp/answer

◎質問者からの返答

ありがとうございます。

私もそういった認識ではいるのですが

情報ソースがどこかにあるでしょうか?


2 ● b-wind
●27ポイント

EXISTSを使ったサブクエリ内で * を使う場合、使わない場合でのメリットデメリットを教えてください。

機能上は特に差はない。


ただし、RDBMS の実装によっては速度に差が出る場合がある。

2つの副問い合わせの違い - オラクル・Oracleをマスターするための基本と仕組み

ちなみに、EXISTS の中の 副問い合わせには、'SELECT * FROM ?'を使用するより 'SELECT 1 FROM ?' などの固定項目を使用した方が早い

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.8.6 EXISTS と NOT EXISTS

もともと、EXISTS サブクエリは SELECT * で開始しますが、SELECT 5 や SELECT column1、またそれ以外のどんな物でも開始する事ができます。MySQL はそのようなサブクエリの中では SELECT リストを無視するので、何も変わらないのです。

◎質問者からの返答

ありがとうございます。

参考リンクは私も拝見してましたが、古い情報なのかなぁと思っていました。

今でも変わらないでしょうか?


3 ● khazad-Lefty
●26ポイント ベストアンサー

MS-SQLServer使いです。実機が手元にないので感覚的な話になりますが。

まず、ある程度質のいいオプティマイザであれば、

Existsがある時点で、*が指定されても全部の列を確認するわけではなくて、

「行があるか」のみを確認しに行くはずです→count(*) と同じ

メリット

デメリット

http://www.geocities.jp/mickindex/database/db_optimize.html#Loca...

◎質問者からの返答

なるほど、ありがとうございます。

私もほぼ同様の認識でおります。

ただ、それが記載されている情報ソースがみあたらなくて…何かご存知でしたら教えてください。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ