2011-06-30 20 views
7

私は非常に悪い実行しているSQLクエリを持っています。私はそれをテーブルで行われたINNER JOINまで追跡しました。今私は2当量されていないが、知っている...ここインクルードは、(追加の基準を持って参加しているので、私はSQL内部対左側結合の質問

SELECT * 
    FROM SomeTable ST 
    JOIN BigTable BT ON BT.SomeID = ST.SomeID 
        AND BT.Something = ST.Something 
        AND BT.AnotherValue = '123' 

を求めていますものです - これは参加左に変更すると、有意に(6分20秒から)のパフォーマンスを向上させます何か=何か) - これを同じ結果を生み出す左の結合に変更していますが、それほど高速ですか?返さ

結果は...左大幅に高速化された状態でLEFT/INNERを使用して同じです

+0

これは奇妙です。なぜなら、ほとんどの場合、「INNER JOIN」が優れているからです。 OUTER JOINは、一致しない場合でも行を返す必要があります。あなたは結合型よりもこれ以上のものはないと確信していますか? – Yuck

+0

YUP、これまでどおりに混乱しています - 論理的な読み取りは数百万(数百万)単位で減少します – user822150

+0

両方の実行計画を投稿できますか? – Thilo

答えて

2
それは、内側がより良いパフォーマンスを与える他の方法で回避に参加することのように見える

...

SELECT 
    * 
FROM 
    BigTable AS BT 
INNER JOIN 
    SomeTable AS ST 
ON 
    BT.AnotherValue = '123' 
AND 
    BT.SomeID = ST.SomeID 
AND 
    BT.Something = ST.Something 

またはサブクエリ

また
SELECT 
    * 
FROM 
    (SELECT * FROM BigTable WHERE AnotherValue = '123') AS BT 
INNER JOIN 
    SomeTable AS ST 
AND 
    BT.SomeID = ST.SomeID 
AND 
    BT.Something = ST.Something 

と、BigTable.AnotherValueが適切にインデックス化されていることを確認します。

0

両方の結合から同じ結果が得られている間に、左結合と内部結合が異なることを理解することが重要です。

左の参加は、右の表には 一致するものがない場合でも 左の表からすべての行がかかります。

SQL LEFT JOINSQL INNER JOIN

だからあなたのデータだけ異なる2が参加する与えられた同じであるようにして製造することを起こります。これについて

SELECT * 
    FROM SomeTable ST 
    JOIN BigTable BT ON BT.SomeID = ST.SomeID 
        AND BT.Something = ST.Something 
        AND BT.AnotherValue = '123' 

方法:

SELECT 
    * 
FROM 
    SomeTable 
     INNER JOIN 
    BigTable 
     ON SomeTable.PreferedPrimaryKey = BigTable.PreferAForeignKey 
     AND SomeTable.SomethingThatIsIndexedAndPreferableNumeric = BigTable.SomethingThatIsIndexedAndPreferableNumeric 
WHERE 
    BigTable.AnotherValue = '123' 

あなたのインデックスを確認し、参加の第二部のためのあなたの基準は非インデックス付き文字列ではないことを確認してください。

+1

信頼できるソースとしてw3schoolを使用していません。決して。それは彼らが私に言ったことです。 – user194076

+0

w3schoolについてこれを聞いた場所はわかりませんが、SQL結合は何十年も前からあり、いくつかのデータベースに実装されています。彼らはおそらくこの権利を得ました。 – JeffO

+0

そうです。それは本当に重要なことです。 –

関連する問題