序文 この記事では主に、MySQLに大量のデータを挿入する4つの方法を紹介し、参考と学習のために共有します。詳しい紹介を見てみましょう。 方法1: ループ挿入 これも最も一般的な方法です。データ量が多くない場合は使用できますが、毎回データベースに接続するためにリソースを消費します。 基本的な考え方は次の通りです (ここでは擬似コードを記述していますが、具体的な記述は独自のビジネス ロジックやフレームワーク構文と組み合わせることができます) ($i=1;$i<=100;$i++) の場合{ $sql = '挿入.............'; //クエリSQL } foreach($arr を $key => $value として){ $sql = '挿入.............'; //クエリSQL } $i <= 100 の間{ $sql = '挿入.............'; //クエリSQL $i++ } それはあまりにも一般的であり、難しくもないし、今日私が主に書いている内容ではないので、ここではこれ以上述べません。 方法2: 接続リソースを減らしてSQL文を結合する 疑似コードは以下のとおりです //ここでは、arr のキーがデータベース フィールドと同期されていると想定しています。実際、ほとんどのフレームワークは、PHP でデータベースを操作するときにこの設計を使用します。$arr_keys = array_keys($arr); $sql = 'INSERT INTO tablename (' . implode(',' ,$arr_keys) . ') 値'; $arr_values = array_values($arr); $sql .= " ('" . implode("','" ,$arr_values) . "'),"; $sql = substr($sql,0,-1); // スプライシング後、おそらく INSERT INTO tablename ('username','password') 値になります ('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx') ....... //クエリSQL この書き方は、データが非常に長い場合を除き、通常 10,000 件のレコードを挿入する場合に基本的に問題ありません。カード番号のバッチ生成、ランダム コードのバッチ生成など、通常のバッチ挿入を処理するには十分です。 。 。 方法3: ストアドプロシージャを使用する 私はこれを手に入れ、SQL を提供します。特定のビジネス ロジックを自分で組み合わせることができます。 区切り文字 $$$ プロシージャ zqtest() を作成する 始める i int をデフォルトで 0 と宣言します。 i=0 に設定します。 トランザクションを開始します。 i<80000の場合 //挿入SQL i=i+1 と設定します。 終了しながら; 専念; 終わり $$$ デリミタ; zqtest() を呼び出す。 これは単なるテストコードであり、特定のパラメータを自分で定義できます。 一度に 80,000 件のレコードを挿入しています。多くはありませんが、各レコードには大量のデータがあり、varchar4000 とテキスト フィールドが多数あります。6.524 秒かかります。 方法4: MYSQL LOCAL_INFILEを使用する 私は現在これを使用しているので、参考のためにpdoコードをここにコピーしました //pdo を設定して MYSQL_ATTR_LOCAL_INFILE を有効にする /*[email protected] パブリック関数 pdo_local_info() { グローバル $system_dbserver; $dbname = '[email protected]'; メールアドレス ユーザーID $pwd = '[email protected]'; $dsn = 'mysql:dbname=' . $dbname . ';host=' . $ip . ';port=3306'; $options = [PDO::MYSQL_ATTR_LOCAL_INFILE => true]; $db = 新しい PDO ($dsn、$user、$pwd、$options); $db を返します。 } //疑似コードは以下のとおりです public function test(){ 配列キーを配列要素に代入します。 $root_dir = $_SERVER["DOCUMENT_ROOT"] . '/'; $my_file = $root_dir . "[email protected]/sql_cache/" . $order['OrderNo'] . '.sql'; $fhandler = fopen($my_file, 'a+'); ($fhandler) の場合 { $sql = implode("\t"、$arr); $i = 1; ($i <= 80000) の間 { $i++; fwrite($fhandler、$sql。"\r\n"); } $sql = "LOAD DATA ローカル INFILE '" . $myFile . "' INTO TABLE "; $sql .= "tablename (" . implode(',' ,$arr_keys) . ")"; pdo_local_info は、ローカル コンピュータで実行する必要があります。 $res = $pdo->exec($sql); もし (!$res) { //TODO 挿入に失敗しました} @unlink($my_file); } } これも大量のデータがあり、varchar4000 とテキスト フィールドが多数あります。 所要時間: 2.160秒 上記は基本的な要件を満たしています。100 万のデータ ポイントは大きな問題ではありません。そうでない場合、データが大きすぎると、データベースとテーブルをシャーディングしたり、挿入にキューを使用したりする必要があるかもしれません。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: GIFアニメーション効果を模倣した自動ビデオ再生を実現するWeChatアプレットの例
>>: テキスト ファイルの並べ替えに役立つ Awk コマンドラインまたはスクリプト (推奨)
1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...
SVG (Scalable Vector Graphics)は、XML 構文に基づいた画像形式です。...
目次1. 概要2. MySQLデータ型の詳細な説明1) 文字列型2) 整数型3) 浮動小数点型4) ...
クエリ書き換えプラグインMySQL 5.7.6 以降、MySQL Server は、サーバーが実行す...
1. 公式紹介grep は Linux でよく使用されるコマンドです。これは、ファイルやテキストに対...
具体的な方法: 1. コマンドプロンプトを開く2. mysql -u root -pコマンドを入力し...
1. テーブル構造テーブル人id名前1あなた2あなた(スペース) 3あなた(スペース2つ) 2. ク...
冒頭にこう書かれています:アブソリュートは言った。「親戚よ、私はあなたを私の人生で見たくない!」なぜ...
win10 + Ubuntu 20.04 LTS デュアルシステムインストール (UEFI + GP...
まず、Vue-cli をインストールする必要があります。 npm インストール -g vue-cli...
今日は、Linux ホスト上で 4 つの MySQL データベースを起動する方法について説明します。...
データのバックアップ操作は非常に簡単です。次のコマンドを実行します。 docker run --vo...
目次1.画像レイヤーの数を減らす1. 命令の統合2. 多段階ビルド3. スクワッシュ機能を有効にする...
最近、仕事でサウンド ファイルを再生するために Web ページにプレーヤーを埋め込む必要に迫られまし...
開発動向: html (ハイパーテキスト マークアップ言語) - xhtml (拡張ハイパーテキスト...