2016-04-12 10 views
-1

Meine einfache Aktualisierungsabfrage dauert zu lange, um ausgeführt zu werden. Es gibt ungefähr 10m Datensätze von denen ich nur für 1k Datensätze ausführe.Leistungsoptimierung bei Aktualisierungsabfrage

Statement ist wie folgt:

UPDATE tab 
    SET col1= 'yes', 
     col2 = 'yes' 
WHERE col7 ||'_'|| col8 = 'VAL_0' 
    AND col10 = 'NA' 

Diese Aussage 70mins dauert etwa auszuführen.

Ich habe auch den Index auf col7 ||'_'|| col8 dies erstellt. Obwohl es diese Zeit braucht.

EDIT: Hier VAL_0 'aus anderen resultset kommen (Daten-Tabelle)

Gibt es irgendwelche Vorschläge, damit ich meine Abfrage schneller zu laufen. Ich habe versucht, Indizes auf (col10) und auf (col7 ||'_'|| col8), aber es dauert verdammt viel Zeit zu führen. andere Tuning-Techniken, die Sie vorschlagen?

Dank

+1

Doppel zitierte '" NA "', ist das eine Spalte? – jarlh

+2

Warum Komma nach dem zweiten ja? –

+4

Warum nicht einfach 'col7 = 'VAL' und col8 = '0''? – jarlh

Antwort

1

Dies ist die Abfrage:

UPDATE tab 
    SET col1= 'yes', 
     col2 = 'yes', 
WHERE col7 ||'_'|| col8 = 'VAL_0' AND col10 = 'NA' 

Beginnen Sie mit einem Index auf tab(col10). Das könnte helfen.

Wenn Sie können, ändern die Abfrage:

UPDATE tab 
    SET col1= 'yes', 
     col2 = 'yes', 
WHERE col7 = 'VAL' AND col8 = '0' AND col10 = 'NA'; 

(Hinweis: Verwenden Sie 0 statt '0' wenn col8 tatsächlich eine Zahl ist.)

Dann auf einen Index erstellen tab(col10, col7, col8)

+2

kommt Können Sie beschreiben, warum Sie die Spaltenreihenfolge col10, col7, col8 beim Erstellen des Index ausgewählt? – jarlh

+0

@jarlh Ist es wichtig, in welcher Reihenfolge die Spalten des Index liegen, basierend auf den Informationen, die das OP zur Verfügung gestellt hat? Jede Permutation wäre in Ordnung, imo. (Offensichtlich, wenn andere Abfragen eine oder mehrere dieser 3 Spalten verwenden, dann würde das Dinge ändern - vielleicht. Aber das OP hat nichts anderes als diese eine Abfrage erwähnt, also ...) – Boneist

+0

@jarlh. . . Für Gleichstellungsbedingungen spielt es keine Rolle. Ich habe gerade einen Index ausgewählt, der für beide Versionen der Abfrage funktioniert. –