行を反復処理してデータベースに挿入するために、まだ「for」または「while」ループを使用していますか? .csv ファイルの読み取りと MySQL データベースへのアップロードに別のコードをまだ作成していますか?
MySQL が提供する「LOAD DATA」ステートメントを使用して、線形ロジックに「NO」と言います。行数を最小限に抑え、パフォーマンスを大幅に向上させるために、コードを変更する準備をしてください。
MySql は LOAD DATA ステートメントを提供します。これは、非常に最小限のコードでテキスト ファイルからデータを読み取り、テーブルに挿入する非常に高速な方法です。
MySQL の公式ドキュメントによると、LOAD DATA ステートメントはファイルからデータを非常に高速に読み取るために使用され、データベースを複数回ヒットする代わりに 1 回のクエリでこのデータをテーブルに挿入できます。 「INSERT INTO」クエリを使用します。
MySQL にはステートメントも用意されています -> 「SELECT…INTO OUTFILE」は、「LOAD DATA」の動作とまったく逆の動作を行い、データをテーブルからファイルに読み取ります。
MySql によって提供される mysqlimport ユーティリティは、データをインポートするためにサーバー上の LOAD DATA ステートメントを内部的に呼び出します。
上記の要点スニペットは、一般的なデータ読み込みステートメントを示しています。利用可能なオプションはすべて上記のコードに記載されています。
ここでは、.csv ファイルを単純に読み取り、その行を互換性のあるテーブルに挿入する簡単な例に焦点を当ててみましょう。
簡単な例:
LOAD DATA INFILE ‘data.csv’ INTO TABLE db.my_table
すべての重要なオプションを含む全体的な例:
言うまでもなく、このステートメントが機能するには、CSV ファイルが適切にフォーマットされている必要があります。
上記のステートメントを使用すると、10 万行を超える .csv が数秒でテーブルにインポートされます。
ここで、注意すべき重要な点がいくつかあります:MySql 8.0 では、LOCAL を使用する機能はデフォルトで False に設定されています。サーバーとクライアントは LOCAL を許可するように構成する必要があるため、一部のユーザーは許可エラーが発生する可能性があります。上記のステートメントは MySql レベルで実行されるため、ソース ファイルはインポートするためにクライアントからサーバーにコピーされます。
これにより、セキュリティ上の問題がいくつか発生します。このコードを使用している間、クライアントとサーバーの接続が安全であることを確認する必要があります。
権限エラーの場合は、
local_infile
SET GLOBAL local_infile = true;
注: このフラグをオーバーライドすることはセキュリティ ソリューションではなく、リスクを受け入れることを承認するものです。詳細については、このドキュメントを参照してください。
??結論
MySql LOAD DATA ステートメントは、非常に短い時間でファイルを読み取るために使用されます。
ソース ファイルは任意のテキスト ファイルにすることができますが、この例では .csv を使用しています。
LOAD DATA LOCALは MySql 経由でソース ファイルをサーバーにコピーするため、サーバー側でセキュリティ対策を実装する必要があります。
mysqlimportユーティリティは内部で LOAD DATA ステートメントを使用します。 ステートメントに
IGNORE 1 LINESを追加すると、CSV のヘッダーを無視できます。
?参照
公式ドキュメント以上がCSV ファイル データを MySql テーブルに一括アップロードするにはどうすればよいですか? LOAD DATA を使用する非常に高速な方法です。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。