2016-04-22 23 views
0

もっと良いSQLステートメントやアプローチをお勧めしますか?INSERT INTOリンクテーブルの方が速いですか?私の現在のアプローチは、テーブルが大きくなり、リンクテーブルINSERTクエリが問題になると遅くなります。リンクテーブルへのINSERTの最適化方法

私は2つのテーブルをリンクテーブルで結合しました。スキーマは以下の通りです:

CREATE TABLE table1 
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
field1 VARCHAR(40)) 

CREATE TABLE table2 
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
field1 VARCHAR(100), 
field2 INT, 
field3 VARCHAR(40)) 

CREATE TABLE linkTable 
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
field1 INT REFERENCES table1(id), 
field2 INT REFERENCES table2(id)) 

私はバッチ挿入にしようとしていますので、私は現在、私はこの長いクエリでリンクテーブルに重複値を加算しておりませんことを確認しています:

INSERT INTO linktable(field1,field2) 
SELECT table1Id, table2Id FROM 
(SELECT table1.id table1Id, table2.id table2Id FROM table1,table2 
WHERE table1.name=? AND table2.name=?) tmp 
WHERE NOT EXISTS 
(SELECT linktable.field1 FROM linktable tmp1 WHERE 
tmp1.field1=tmp.table1id AND tmp1.field2=tmp.table2id) 

答えて

0

場合使用しているJavaを挿入するには、ResultSetを使用して列の中の何かの数をチェックし、その数が0の場合に挿入することができます。

ResultSet = Statement.executeQuery ("Select count  (column_name) From table_name Where column_name = 'whatever'; 

While (rs.next()){ 
Int count = rs.getInt (count (column_name); 

If (count == 0){ 
     Statement2.executeUpdate ("INSERT INTO......") 

    } 


    }