SQL Q&A

 

Sqlのパフォーマンスについての質問です。

Sqlのパフォーマンスについての質問です。
SqlServerにおいて、テーブルを結合する際に、
①結合条件としてデータを絞り込む条件を追加
SELECT *
FROM テーブルA
LEFT JOIN テーブルB 
ON テーブルA.ID = テーブルB.ID
AND テーブルB.ID = '100'

②結合した結果、WHERE句で条件を指定する
SELECT *
FROM テーブルA
LEFT JOIN テーブルB 
ON テーブルA.ID = テーブルB.ID
WHERE
テーブルB.ID = '100'

上記二つのやり方のどちらがパフォーマンスがいいのでしょうか?
ご存知の方がいらっしゃったらご教授願います。
このエントリーをはてなブックマークに追加
2014-08-27 11:34:28   1244

コメント

2014年 09月 02日 (11:53)
こんにちは。
イノ(inno)です。

①番と②番のSQLは結果が異なります。
下記のSQLでご確認ください。


-- #### テストテーブル作成
CREATE TABLE #Table1
(
Idx int
)

CREATE TABLE #Table2
(
Idx int
)

-- #### テストデータ登録
INSERT INTO #Table1
SELECT 100 UNION
SELECT 200 UNION
SELECT 300

INSERT INTO #Table2
SELECT 200


-- #### LEFT OUTER JOIN 実行
SELECT *
FROM #Table1 A
LEFT OUTER JOIN #Table2 B
ON A.Idx = B.Idx AND B.Idx = 200

実行結果
Idx Idx
----------- -----------
100 NULL
200 200
300 NULL

SELECT *
FROM #Table1 A
LEFT OUTER JOIN #Table2 B
ON A.Idx = B.Idx
WHERE B.Idx = 200

実行結果
Idx Idx
----------- -----------
200 200


同じ結果が出るのはLEFT OUTER JOIN ではなく JOIN を利用した時は同じ結果がでます。
ですが、下記のようなSQLだっとどちも同じパフォーマンスです。
少し複雑なSQLになると少し分かるかも知れませんが、
あまり変わらないと思います。

SELECT *
FROM #Table1 A
JOIN #Table2 B
ON A.Idx = B.Idx AND B.Idx = 200


SELECT *
FROM #Table1 A
JOIN #Table2 B
ON A.Idx = B.Idx
WHERE B.Idx = 200

SQL SERVER 店舗毎のTOP10

-.日付:2015-12-22   カテゴリ : -   閲覧数:476

SQLServer Management Studio サーバーへの接続履歴を削除したい  (1)

-.日付:2015-03-09   カテゴリ : -   閲覧数:1668

sql server 2008 でselect文のwhere句にcaseを使って複数条件をセットしたい

-.日付:2015-02-12   カテゴリ : -   閲覧数:1300

IDENTITY列の複数テーブルへのINSERT  (1)

-.日付:2014-10-02   カテゴリ : -   閲覧数:1373

Sqlのパフォーマンスについての質問です。  (1)

-.日付:2014-08-27   カテゴリ : -   閲覧数:1244

SELECT時にカウントアップ  (1)

-.日付:2014-08-25   カテゴリ : -   閲覧数:1554

「char」と「varchar」は何か違いがあるのでしょうか?  (1)

-.日付:2014-07-30   カテゴリ : -   閲覧数:1260

Copyright © 2015 INNOYA.COM All rights reserved. RSS