2016-05-06 9 views
1

私はこのクエリを実行しようとした:Rでmysql update queryを実行する高速化方法はありますか? Pythonで?

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

が、TABLE1が1,100,000行を持っており、表2は350,000,000行を持っている紀元前それが永遠にかかります。

Rでこのクエリを実行する方法はありますか?またはPythonで?

+0

あなたはpandas(ライブラリをPythonで試すことができます) – ashish

答えて

1

私は3つのサブクエリの代わりに1を使用してクエリを書き直し - UNIONと2 INNER JOIN文を使用して:table1のすべての行が見えない更新

  • 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 
          ) 
    

    マイノート1.1Mの行に触れなければならないので、良い考えです。おそらく、numberを格納するための別のデータ構造は、より優れた性能を持っているでしょう

  • あなたはより一般的なアプローチが必要な場合は(カッコ
  • におけるクエリの一部のみが、EXPLAINに見てみましょうtable1の更新せずにクエリの一部を実行してみますSQLクエリの最適化:https://dev.mysql.com/doc/refman/5.7/en/using-explain.html
関連する問題