

where句内のselect副問い合わせは問い合わせの行数回行われると聞いたのですか本当でしょうか?
ベンダによって異なるのでしょうか?当方sqlserverは初めてでoracleをずっと使っていましたが聞いたことがなかったので。ベンダによって異なるなんてことはあるのでしょうか
以下の例でsqlserver2014で実際行ったところ確かにジョインした方が早いことがわかりました。
テーブルA 1件
テーブルB 2000件
【遅い例】
select 列1
from B
where B.列2 ≦ (select 列3 from A)
【早い例】
select 列1
from B inner join A
where B.列2 ≦ A.列3
No.2ベストアンサー
- 回答日時:
select 列1 from B WHERE B.列2 <= ANY(SELECT 列3 FROM A)
をやっていますね
エンジンにもよりますがこういったANYは相関サブクエリにならないので遅いんですよ
実際には連携状態をみるコマンドを利用しないと説明がつきませんが
sqlserverの仕様がよくわからないので説明できません。
No.1
- 回答日時:
インデックスがうまく効かないのでは?
特に遅い例のような書き方は一般的なSQLの文法としておかしいです
(たまたまAが1件しかないのでなんとか動きますが)
また早い方のjoin も接続条件の書き方がおかしいですよね?
whereではなくon?
ご回答ありがとうございます。
テーブルAは必ず1件しか無いと決まりきっているテーブルです。
確かにwhereではなくonですね。投稿時の誤りです。インデックスうんぬんは両方無しと考えてください。
遅い例で内部的にwhere句の問い合わせが件数分行われると聞いたのでそこが知りたいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外部参照してるキーを主キーに...
-
UPDATE文のWHERE条件に他のテー...
-
SQLで列名を変数にできないでし...
-
SELECT 文 GROUP での1件目を...
-
複数列の最大値を求めたい
-
列のヘッダーを含めるのをデフ...
-
列番号による項目の取得について
-
v$processのPROGRAM列に関する質問
-
【VB.NET】日付型の列にNULLを...
-
特定の列だけをGROUP BYしたい時
-
SQLのクエリ、又はプロシージャ...
-
SQL Server 2008 を使用してい...
-
特定の文字列で列を区切るには?
-
列の数字を足し合わせたい
-
Access:クエリーにて集計後に...
-
SQLite3 の UpdateCommand エラー
-
エクセルでワイルドカード検索...
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
SQLで特定の項目の重複のみを排...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
UPDATE文のWHERE条件に他のテー...
-
SQLで列名を変数にできないでし...
-
列番号による項目の取得について
-
列のヘッダーを含めるのをデフ...
-
Access:クエリーにて集計後に...
-
【VB.NET】日付型の列にNULLを...
-
SQLによる"あいうえお"順でソー...
-
テーブル列数とデータファイル...
-
Excel の簡単な操作について
-
ふと疑問
-
特定の文字列で列を区切るには?
-
v$processのPROGRAM列に関する質問
-
複数列の最大値を求めたい
-
エクセルでワイルドカード検索...
-
Accessでの全データから空白削除
-
列の数字を足し合わせたい
-
EXCEL 集計の方法
-
SQL文の関数らしいのですが、意...
おすすめ情報
早い例のwhereはonでした。記載誤りでした?
すいません。補足の最後が?になってますが「。」の誤りです