2017-09-14 9 views
-3

2つのクエリを実行すると、SQL Server Management Studioのクライアント統計では、2番目のクエリの実行時間が短縮されます。誰かが2番目のクエリがより速い理由を教えてもらえますか?どのSQLクエリがより速く実行するか

SELECT MERCHANT_NO, 
(SELECT CASE WHEN CITY IS NULL OR CITY='' THEN m.CITY 
ELSE 
    COALESCE((SELECT c.CITY 
    FROM CODE_CITY c 
    WHERE m.CITY=c.CODE_CITY_ID 
    ), m.CITY)  
    END) AS CITY, 
(SELECT CASE WHEN STATE IS NULL OR STATE='' THEN m.STATE 
ELSE 
    COALESCE((SELECT s.STATE 
    FROM CODE_STATE s 
    WHERE m.STATE=s.CODE_STATE_ID 
    ), m.STATE)  
    END) AS STATE, 
(SELECT MERCHANT_CAT_DESC FROM MERCHANT_CAT mc WHERE mc.MERCHANT_CAT_ID=m.MERCHANT_CAT_ID) AS MERCHANT_CAT_DESC 
FROM MERCHANT m 
WHERE 1=1 

SELECT MERCHANT_NO, 
(SELECT CASE WHEN t.CITY IS NULL OR t.CITY='' THEN m.CITY 
    ELSE 
    t.CITY 
    END AS CITY 
FROM(
     SELECT 
     CASE WHEN CITY IS NULL OR CITY='' THEN '' 
      ELSE 
      (SELECT c.CITY 
       FROM CODE_CITY c 
       WHERE merc.CITY=c.CODE_CITY_ID 
      )  
      END AS CITY 
      FROM MERCHANT merc 
      WHERE merc.MERCHANT_NO=m.MERCHANT_NO 
) t) AS CITY_DESC, 
(SELECT CASE WHEN cs.STATE IS NULL OR cs.STATE='' THEN m.STATE 
    ELSE 
    cs.STATE 
    END AS STATE 
FROM(
     SELECT 
     CASE WHEN STATE IS NULL OR STATE='' THEN '' 
      ELSE 
      (SELECT s.STATE 
       FROM CODE_STATE s 
       WHERE merc.STATE=s.CODE_STATE_ID 
      )  
      END AS STATE 
      FROM MERCHANT merc 
      WHERE merc.MERCHANT_NO=m.MERCHANT_NO 
) cs) AS STATE_DESC, 
(SELECT MERCHANT_CAT_DESC FROM MERCHANT_CAT mc WHERE mc.MERCHANT_CAT_ID=m.MERCHANT_CAT_ID) AS MERCHANT_CAT_DESC 
FROM MERCHANT m 
WHERE 1=1 
+2

これは 'EXPLAIN'の使い方を学ぶのに適しています。これはおそらく、あなたが受け取るかもしれない答えよりも2つの質問の詳細を明らかにするでしょう。 –

+0

相関サブクエリから内部結合に両方のクエリを変換すると実行時間がさらに短縮されます – cha

+1

実行プランをオンにして両方のクエリを実行すると、自分で見ることができます – TheGameiswar

答えて

0

あなたはCOALESCE 2番目のクエリでデータを使用していません。したがって、最初のクエリよりも高速になることができます。

関連する問題