2016-05-06 4 views
1

Ich habe versucht, diese Abfrage auszuführen:Gibt es eine schnellere Möglichkeit, mysql Update-Abfrage in R zu tun? in Python?

update table1 A 
set number = (select count(distinct(id)) from table2 B where B.col1 = A.col1 or B.col2 = A.col2); 

aber es dauert ewig bc tabelle1 1.100.000 Zeilen hat und table2 hat 350.000.000 Reihen.

Gibt es eine schnellere Möglichkeit, diese Abfrage in R zu tun? oder in Python?

+0

Sie können versuchen, Pandas (Bibliothek in Python) – ashish

Antwort

1

umschrieb ich Ihre Frage mit drei Unterabfragen anstelle eines - mit UNION und zwei INNER JOIN Aussagen:

UPDATE table1 as A 
SET number = (SELECT COUNT(DISTINCT(id)) 
       FROM 
        (SELECT A.id as id 
        FROM table1 as A 
        INNER JOIN table2 as B 
        ON A.col1 = B.col1) -- condition for col1 

        UNION DISTINCT 

        (SELECT A.id as id 
        FROM table1 as A 
        INNER JOIN table2 as B 
        ON A.col2 = B.col2) -- condition for col2 
      ) 
Meine Notizen

:

  • alle Zeilen in table1 aktualisiert sieht nicht so aus eine gute Idee, weil wir 1.1M Zeilen berühren müssen. Wahrscheinlich wäre eine bessere Leistung haben eine andere Datenstruktur number zum Speichern
  • versuchen, einen Teil der Abfrage ohne Aktualisierung von table1 (nur ein Teil der Abfrage in Klammern
  • Werfen Sie einen Blick in EXPLAIN zu laufen, wenn Sie allgemeineren Ansatz brauchen für Optimierung von SQL-Abfragen: https://dev.mysql.com/doc/refman/5.7/en/using-explain.html
Verwandte Themen