2009-08-13 21 views
0

私は自分のコードでパフォーマンス上の問題に直面しています。私はdb接続を選択クエリを作成して、1つのselectクエリに500行を挿入しています。 .ANYのアイデアにqoodされていない挿入するために2 miuntesを取っているcursor.executemany.Butクエリの周り8-9回は最初にして、すべての使用を挿入python db insert

def insert1(id,state,cursor): 

    cursor.execute("select * from qwert where asd_id =%s",[id]) 

    if sometcondition: 

     adding.append(rd[i]) 

cursor.executemany(indata, adding) 
RD [i]を作成するレコードのARAYがある

indataは挿入文です

#prog start here 


cursor.execute("select * from assd") 



for rows in cursor.fetchall() 

if rows[1]=='aq': 


    insert1(row[1],row[2],cursor) 

if rows[1]=='qw': 

    insert2(row[1],row[2],cursor) 
+3

ご覧になる際には、いくつかのコードをお知らせください。 – balpha

+0

サンプルコードを投稿できますか?それなしで改善を提案するのは難しいです。 –

+1

使用しているデータベースエンジン、使用しているモジュール、またはボトルネックがどこから離れているかを特定することさえできません。私の目はあなたのポストの書式から出血しています。 –

答えて

3

私はあなたがなぜこれをやっている。

「assd」の行のサブセットを1つのテーブルに挿入し、別のサブセットを別のテーブルに挿入すると思われますか?

insert into tab1 select * from assd where asd_id = 42 and cond1 = 'set'; 
insert into tab2 select * from assd where asd_id = 42 and cond2 = 'set'; 

劇的データベースとクライアントサーバトラフィックに往復のあなたの数を減らしたい:

理由だけで、このような構造に2つのSQLステートメントでそれをしません。それはまた、一桁の速さです。

もちろん、コードの挿入部分と選択部分の両方に列名を指定することを強くお勧めします。

+0

私はいくつかの条件で3つのテーブルからデータを挿入して選択するために条件を確認しなければなりません。 私はデータベース接続にpsycopg2を使用しており、postgressqlデータベースを使用しています – ha22109

+0

最高のパフォーマンスを得るには、あなたのロジックをSQLに移そうとするべきです。 3つのソース表の結果セットを結合するために、共用体を使用できます(列が同じ型であることを前提とします)。つまり、60k行を挿入する6つのクエリは、関連するラウンドトリップがある60006個のクエリよりも常に高速になるという考えです。 –

+0

私は私のロジックで正規表現を使用して正規表現をdb scripts.Sinceから使用することはできないと思います。 – ha22109