2017-09-14 1 views
-3

Wenn ich die zwei Abfragen ausführen, zeigt Clientstatistiken in SQL Server Management Studio, dass die zweite Abfrage schnellere Gesamtausführungszeit hat. Kann mir jemand sagen, warum die zweite Abfrage schneller ist?Welche SQL-Abfrage wird schneller ausgeführt

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

Dies wäre eine gute Zeit, um zu lernen, wie man 'EXPLAIN' verwendet, was wahrscheinlich mehr Details über die zwei Abfragen ergeben wird als jede Antwort, die Sie erhalten könnten. –

+0

Sie erhalten eine noch schnellere Ausführungszeit, wenn Sie beide Abfragen von korrelierten Unterabfragen in innere Verknüpfung konvertieren – cha

+1

Ausführungsplan aktivieren und beide Abfragen ausführen, können Sie selbst sehen – TheGameiswar

Antwort

0

Sie verwenden nicht COALESCE Daten in der zweiten Abfrage. Nur so kann es schneller sein als die erste Abfrage.

Verwandte Themen