質問させて頂きます。
PHPとMySQLを使用して、ユニークな値(10桁ほどの英数文字列)を持ったデータを、DBに大量に登録したいと考えています。1度に1万件ほどを想定しています。
その場合、
先に大量のデータを作成して、1件ずつユニークかのチェック→DBに登録(insert)といった方法や、
1件データを作成→ユニークチェック→DBに登録(insert)を繰り返す方法などあると思うのですが、
どのような方法が比較的DBに負荷をかけずに短い時間で行なうことが出来るでしょうか。
質問が大雑把になってしまい申し訳ありません。
自分なりに調べてはみたのですが、確認したサイトなどによって方法がバラバラでしたので、こちらで質問させて頂きました。
処理以外の部分でも、テーブルやカラムにこういった設定を行なうと良いなど、どのような情報でもよろしいので、ご教授頂けると幸いです。
また、上記の質問内容に不備な点がございましたら、申し訳ございません。
ご存じの方がいらっしゃいましたら、よろしくお願いいたします。
No.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 …
場合によっては元データがCSV形式であればLOAD DATA INFILE構文
がつかえるかもしれません
http://dev.mysql.com/doc/refman/5.1/ja/load-data …
元データを所定のルールで補完しながらデータを投入するのでしたら
やはりINSERT構文が基本です
総合的に考えるとPDOなどの互換性をもった仕組みを利用すると
多少の環境の変化にも対応できるとおもうのでお得です
またPHP+MySQLの場合はmysqliという仕組みが用意されていて
オブジェクト型・手続き型というアプローチの仕方があります。
それぞれ特性がありますので、やり方は多少ためしてみてから
決めた方がよいですが、一般にオブジェクト型の方が好まれるようです。
ちなみにmysql関数(iがつかないタイプ)を利用した解説書がまだ
販売していたりしますが、内容が古いので参考にしないほうがいいでしょう
データの持ち方についてはRDBの原則として正規化をしていると思いますので
それに合わせてデータ投入方法を考えないといけません
一度正規化について詳しく勉強したほうがいいかもしれませんね
返信が遅くなってしまい申し訳ありません。
「INSERT IGNORE INTO 構文」という方法があるのを知りませんでした。
PHP側で重複チェックを行なわなくてよくなったので、処理速度をあげることが出来ました。
またyambejp様がおっしゃられているように、まだまだ勉強不足な部分があるので、記述頂いた内容を参考に勉強したいと思います。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- MySQL SQLで日付別のIDを生成するには 3 2022/10/09 10:34
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
アクセス レコードセットを更...
-
Accessのテーブルデータを一気...
-
Access VBAからエクセルに出力...
-
マテリアライズドビューとスナ...
-
Oracleで上書きImportはできま...
-
ビューのソートについて
-
CSVファイルを毎日、全レコード...
-
accessでレコード更新直後の反...
-
IF NOT EXISTを使用するINSERT文
-
ACCESS2000でのリンクテーブル...
-
PostgreSQLのパフォーマンスに...
-
sql serverのテーブルレイアウ...
-
Access無いけど.mdbが見たい!
-
このISAMでは、リンクテーブル・・
-
データベースを設計するときに
-
処理の途中で停止させ、再開さ...
-
ACCESSで容量が50MBになった...
-
Accessの処理速度を速めるため...
-
結合テーブルでINSERTする方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
Oracleで上書きImportはできま...
-
アクセス レコードセットを更...
-
構文エラー : 演算子がありませ...
-
処理の途中で停止させ、再開さ...
-
ビューのソートについて
-
accessでレコード更新直後の反...
-
結合テーブルでINSERTする方法...
-
同一テーブルのデータを参照し...
-
ACCESSで容量が50MBになった...
-
マテリアライズドビューとスナ...
-
Accessのインポートについて(上...
-
MS Accessを共有した際にファイ...
-
「クリップボードにコピーされ...
-
重複クエリを使ったデータ削除
-
ERROR1062:Duplicate entry.......
-
access 特定のレコード数までエ...
おすすめ情報