2017-09-14 102 views
-3

當我運行這兩個查詢時,SQL Server Management Studio中的客戶端統計信息顯示第二個查詢的總執行時間更快。誰能告訴我爲什麼第二個查詢更快?哪個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'的好時機,它可能會揭示關於這兩個查詢的更多細節,而不是您可能收到的任何答案。 –

+0

將兩個查詢從相關子查詢轉換爲內部連接時,您將獲得更快的執行時間 – cha

+1

打開執行計劃並運行兩個查詢,您可以自己看到 – TheGameiswar

回答

0

您沒有使用COALESCE在第二查詢數據。所以只有它比第一個查詢更快。