- ベストアンサー
【PHP&MySQL】ユニークな大量データ投入方法
- PHPとMySQLを使用して、ユニークな値(10桁ほどの英数文字列)を持ったデータを、DBに大量に登録する方法について質問です。
- 大量のデータを作成して、1件ずつユニークかのチェックを行い、DBに登録する方法と、1件データを作成してからユニークチェックとDBへの登録を繰り返す方法が考えられます。
- どの方法がDBに負荷をかけずに短い時間でデータ投入を行うことができるでしょうか?また、テーブルやカラムの設定についてもアドバイスを頂きたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>ユニークな値(10桁ほどの英数文字列)を持ったデータを、DBに大量に登録したい といっているのに >1件ずつユニークかのチェック しているのはなぜですか? 元データはユニークである保証がない、つまり 「ユニークな値を期待したデータ」でしかないということですか? とりあえずデータを取り込むテーブルのユニークな値を保持するカラムに unique属性(プライマリキーを含む)を設定するところからですね 一つ一つのデータのユニークをプログラム的に検証するのは 無駄が多いのでお勧めできません それと、ユニークではないデータ(ダブったデータ)が来た時には 無視するか、上書きするかを決めないといけません。 無視する場合は、INSERT IGNORE INTO 構文 上書きする場合は、INSERT ON DUPLICATE KEY UPDATE 構文 を利用します。 http://dev.mysql.com/doc/refman/5.1/ja/insert.html http://dev.mysql.com/doc/refman/5.1/ja/insert-on-duplicate.html 場合によっては元データがCSV形式であればLOAD DATA INFILE構文 がつかえるかもしれません http://dev.mysql.com/doc/refman/5.1/ja/load-data.html 元データを所定のルールで補完しながらデータを投入するのでしたら やはりINSERT構文が基本です 総合的に考えるとPDOなどの互換性をもった仕組みを利用すると 多少の環境の変化にも対応できるとおもうのでお得です またPHP+MySQLの場合はmysqliという仕組みが用意されていて オブジェクト型・手続き型というアプローチの仕方があります。 それぞれ特性がありますので、やり方は多少ためしてみてから 決めた方がよいですが、一般にオブジェクト型の方が好まれるようです。 ちなみにmysql関数(iがつかないタイプ)を利用した解説書がまだ 販売していたりしますが、内容が古いので参考にしないほうがいいでしょう データの持ち方についてはRDBの原則として正規化をしていると思いますので それに合わせてデータ投入方法を考えないといけません 一度正規化について詳しく勉強したほうがいいかもしれませんね
お礼
返信が遅くなってしまい申し訳ありません。 「INSERT IGNORE INTO 構文」という方法があるのを知りませんでした。 PHP側で重複チェックを行なわなくてよくなったので、処理速度をあげることが出来ました。 またyambejp様がおっしゃられているように、まだまだ勉強不足な部分があるので、記述頂いた内容を参考に勉強したいと思います。 本当にありがとうございました。