2012-03-29 13 views
1

Gibt es eine Möglichkeit, eine SQL-Abfrage wie die folgende zu beschleunigen?SQL-Abfrage beschleunigen mit Join und wie

SELECT.... 
FROM A, B, C 
WHERE 
A.a = B.a AND 
B.b like '%'+C.a+'%' 
+0

Wenn A, B, C zwischen ihnen verwandt sind, verwenden Sie besser eine innere Verbindung –

+0

@MassimilianoPeluso das ist bereits eine innere Verknüpfung. Es ist nicht in der wünschenswertesten Syntax, aber was denkst du, ist dies eine äußere Verbindung? –

+0

Können Sie einige Beispiele der Daten in B.b und C.a zeigen? Gibt es auch Indizes für A.a, B.a oder B.b? Welcher Teil der Operation ist langsam? Haben Sie sich den Ausführungsplan angesehen? –

Antwort

1
  • Try 'wie' zu vermeiden.

  • Benutzer Inner Join.

  • Erstellen von Indizes auf Tabelle Aa und Ba

    SELECT ... 
    FROM A INNER JOIN B 
    ON A.a = B.a 
    INNER JOIN C 
    ON B.b LIKE '%'+C.a+'%' 
    
+0

Warum 'B.a = C.a'? Ich denke, Sie haben die Semantik dieser Abfrage erheblich geändert ... –

+1

B.a = C.a? das ist falsch! –

1

Während ich viel lieber diese Syntax sehen würde (da es weit weniger wahrscheinlich versehentlich zu einem Cross-Join führen):

SELECT A.a, B.a, B.b, C.a 
    FROM A 
    INNER JOIN B 
    ON A.a = B.a 
    INNER JOIN C 
    ON B.b LIKE '%' + C.a + '%'; 

Wenn der teure Teil dieser Abfrage die Operation LIKE ist, können Sie nicht wirklich viel tun, da dieses spezielle Muster jedes Mal einen Scan erfordert. Können Sie einige Beispiele der Daten in B.b und C.a zeigen? Gibt es auch Indizes für A.a, B.a oder B.b?