「ブロック機能」のリニューアルについて

問題:insertが遅い。20件程度の情報をテーブルにinsertするのに、30秒以上かかる。
環境:Windows XP, MYSQL(TABLE1のidにはindexつき)
仕様:textdata.csvを開き、idを取得する。取得したidをgetid変数に入れる。
   取得したidがTABLE1に無いか調べる。idが無ければinsert。
   あれば読み飛ばす。textdata.csvのidが無くなれば終わり。


con = CREATEOLEOBJ("ADODB.Connection")

//ここでCSVファイルを開き、idを取得しループさせる

getidSQL = "Select * from TABLE1 where id = '" + getid + "';"
RS = con.Execute(getidSQL)

If RS.EOF Then
//DB登録---------------------------------------------------------------------------------------
str = "INSERT INTO TABLE1 (id) values('" + getid + "');"
con.Execute(str)
//DB登録終了------------------------------------------------------------------------------------
endif

//CSVループ

ちなみに、DBにinsertせずに、かわりにテキストファイルに書き込む方法だと一瞬で挿入が完了します。
これをDBに書き込む時に高速化を図りたいのですが、何か良い方法はないでしょうか?

教えて!goo グレード

A 回答 (3件)

総データ数、インデックスの設定、ユニークやプライマリの設定によって


ことなりますが、

>idが無ければinsert。
>あれば読み飛ばす

という仕様であれば、idにユニークを設定し、
INSERT IGNORE INTO TABLE1 (id) values(・・・)
で十分ですね
    • good
    • 0
この回答へのお礼

insert ignoreというのは知りませんでした。一度試してみたいと思います、ありがとうございます!!

お礼日時:2012/03/29 12:03

「id」にインデックス作成してありますか。

INSERTに時間かかっているというよりidが同一のレコード検索に時間がかかっている気がするのですが。
解決策は#1さんの書かれているのが一番簡単かなと思います。
    • good
    • 0
この回答へのお礼

#1様にご回答頂いたignoreというのを知らなかったので、こちらでやってみます。ありがとうございます!

お礼日時:2012/03/29 12:06

極端に遅すぎます。


仕様や考え方がどうのではなくて、冗長な処理が混じっていると思います。
CSVを読み込むところから、まずはロジックを見直した方がいいです。

その上で高速化を検討してください。
    • good
    • 0
この回答へのお礼

はい、極端に遅すぎると思っていました。もう一度コードを精査してみます。ありがとうございます!

お礼日時:2012/03/29 12:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング