2017-02-28 16 views
-3

でのパフォーマンスを登録しよどちら (LEFT JOINは/ INNER JOINを)私はスピードを高め、能力を向上させるために使用しなければならないのは、私はSQLでこのクエリを持っていると私は知りたいのですがSQL

UPDATE poker_hands f 
INNER JOIN (poker_cards a, poker_cards b, 
poker_cards c, poker_cards d, poker_cards e) 
ON f.r1 = a.card_name 
AND f.r2 = b.card_name 
AND f.r3 = c.card_name 
AND f.r4 = d.card_name 
AND f.r5 = e.card_name 
SET f.hand_type = 'Royal flush' 
WHERE ((a.suit = b.suit AND b.suit = c.suit 
AND c.suit = d.suit AND d.suit = e.suit) 
AND (a.game_value = 14 AND b.game_value = 13 
AND c.game_value = 12 AND d.game_value = 11 AND e.game_value = 10)); 
+1

サーバーを? [mysql]または[sql-server]? –

+2

両方で試して、どちらが速く走るかを見てください。違いが分からない場合は、最適化が必要なことすらわからないものを最適化しようとする時間を無駄にしています。また、これらの2つの事柄は等価ではないので、最初は質問が奇妙です。 – csmckelvey

答えて

0

このステートメントでは、WHERE節の述部は、LEFT JOINの「外側」を無効にし、INNER JOINと同等になります。

私は、オプティマイザがそのことを認識し、どちらの場合でも最もコスト効率の良いプランを選択すると思います。同等の実行計画が期待されますが、INNERキーワードがLEFTに置き換えられたときに、このクエリでパフォーマンスの違いを観察することは期待できません。

実際の実行計画を見ることなく、それはちょうど推測です。実行計画を表示するには、我々は(MySQL用)EXPLAINを使用することができますかSET SHOWPLAN_ALL ON(SQL Serverの、またはSTATISTICS PROFILE ONため、ら。)

異なる文の実際の性能は、観察、測定することができます。


LEFT JOINを使用する理由がわかりません。

(そして、新しいキーワードを登録しようと結合操作のための古い学校のコンマの構文の混合...どうなっているのですか?)


限りのパフォーマンスを向上させることなど、私たちが本当にしたいです適切なインデックスが利用可能であり、使用されていることを確認する必要があります。実行計画を見る必要があります。統計の収集と最新の確認が必要な場合があり、より効率的な計画を立てるためにSQLを微調整する必要があるかもしれません。

INNERLEFTに置き換えると、既存のクエリのパフォーマンスが変わる可能性がありますが、パフォーマンス上の問題を解決する可能性は低いです。

個人的に、私は出発点として、これに、同等のクエリのパフォーマンスを調査することを好むだろう:

UPDATE poker_hands f 
    JOIN poker_cards a ON a.card_name = f.r1 AND a.game_value = 14 
    JOIN poker_cards b ON b.card_name = f.r2 AND b.game_value = 13 AND b.suit = a.suit 
    JOIN poker_cards c ON c.card_name = f.r3 AND c.game_value = 12 AND c.suit = a.suit 
    JOIN poker_cards d ON d.card_name = f.r4 AND d.game_value = 11 AND d.suit = a.suit 
    JOIN poker_cards e ON e.card_name = f.r5 AND e.game_value = 10 AND e.suit = a.suit 
    SET f.hand_type = 'Royal flush' 
1

パフォーマンスは問題ではありません。INNER JOINLEFT JOINは異なることをしています。

関連する問題