2017-03-24 2 views
0

Ich habe eine Update-Abfrage in der Stored Procedure, die TABLE1 basierend auf den IDs aus TABLE2 aktualisiert. Dies wird mit einer Unterabfrage wie folgt geschrieben.MySQL RDS Stored Procedure Aktualisierungsabfrage ist langsam

update TABLE1 A 
set status = 'ABC' 
where A.ID in (
     select ID 
     from TABLE2 B 
     where B.SE_ID = V_ID 
      and B.LOAD_DT = V_DT 
     ); 

Ich habe dies mit neu geschrieben,

  • ein JOIN

  • die Unterabfrage aus der Hauptabfrage Maskieren

  • verwendet, um eine temporäre Tabelle und kommen.

Standalone-Update ist schneller.

Aber dies in der Stored Procedure platzieren ist sehr langsam. TABLE1 muss mit 2000 Datensätzen aus der 2000 ID von TABELLE2 aktualisiert werden.

Jemand bitte helfen Sie dabei.

Antwort

1

Verwenden Sie keine Unterabfragen anstelle von Joins. MySQL optimiert diese Verwendung von Unterabfragen sehr schlecht. Das heißt, die Unterabfrage kann bis zu 2000 Mal ausgeführt werden.

Verwenden einer Verknüpfung:

UPDATE TABLE1 A 
INNER JOIN TABLE2 B 
    ON A.ID = B.ID 
SET A.status = 'ABC' 
WHERE B.SE_ID = V_ID 
    AND B.LOAD_DT = V_DT; 

Sie wollen einen Index erstellen, diese zu optimieren.

Keine Notwendigkeit, einen Index auf TABLE1 zu erstellen, wenn meine Annahme korrekt ist, dass seine ID-Spalte sein Primärschlüssel ist. Das ist selbst ein Index.

+0

Ein Index ist bereits für die Spalte se_id, load_dt vorhanden. Ich habe versucht mit Join auch. Ich muss vielleicht versuchen, PK aus Tabelle 1 zu entfernen, basierend auf der Erschwinglichkeit des Geschäfts. Werde es ausprobieren und updaten. – Shabanu

Verwandte Themen