2つのヒントがあります: 1.ファイルを読み込んでデータベースにデータを挿入するためにPHPを使用します。 2. LOAD DATA INFILEのSQL文を使用してファイルを読み取り、データをデータベースに挿入します。 結果は、ヒントを完了するのに多くの時間が必要だが、ヒント2は完了するまでに数秒しか要しないということです。 質問は、2つのヒントの違いは何ですか? phpとsqlの基本的な設計や理論の原則について教えてください。 それがあれば、それは何ですか?phpとsqlの違いは?
答えて
私はここsemiliar質問への答えが見つかりました: https://dba.stackexchange.com/questions/16809/why-is-load-data-infile-faster-than-normal-insert-statements
PHPの使用INSERT文は、データベースにデータを追加するには、それがデータベースへの接続のためのaddential層を使用します。それは待ち時間を生む。
SQL INSERTは高速ではなく、PHPでは、それは付加層を必要としないためです。最後に上記の質問で、なぜLOAD DATA INFILE
速くそれはINSERT
ok、thks。私は今それを見ています。 – James
それはあなたがPHPのバージョンをやっている方法によって異なります。さまざまなレベルのパフォーマンスを備えたいくつかのオプションがあります。
Doctrineまたは PropelのようなORMを使用すると、各レコードを詳細に制御でき、フレンドリーなインターフェイスが公開されますが、最も遅いアプローチです。通常、各レコードは検証されるので、そのセキュリティはありますが、データがすでにわかっている場合は良い方法があります。
ORMまたはPDOなどで提供されているRAWデータベースアダプタを使用すると、通常、準備された文を使用して、異なるデータ値で同じINSERT
文を繰り返し実行することができます。
最も効率的なPHPドリブンな方法は、複数の値セット、いわゆる「マルチインサート」を使用して大文字のINSERT
文を作成することです。これは通常、一度に1000行以上のチャンクでデータを追加する方法ですそれぞれの行は大きくなります。適切なサーバチューニングを行うことで、これのパフォーマンスが最適に近づき、理論上最速の30-50%のペナルティを支払う可能性があります。時にはこれは合理的なトレードオフです。
LOAD DATA INFILE
のアプローチは、MySQLが内部的な最適化を処理するために、常に最速になります。これは、データベースサーバー上にファイルを直接読み取ることができるようにするため、最も制限的なものです。また、データが正しいことを確認し、スキーマに収まるかどうか、または意図しない切り捨てが発生する可能性があります。データ検証は行われず、無効な日付は0000-00-00
などの問題を引き起こす可能性があります。
これらのアプローチはすべて状況によって異なります。速度が必要な場合は、LOAD DATA
の方法が常に最速になりますが、リスクがないわけではありません。
PHPを式から削除すると、オーバーヘッドが減少します。ディスク上のファイルを使用すると、ネットワークスタックとMySQLネットワークプロトコルのオーバーヘッドが回避されます。これらの2つは、コストをかなり低く抑えていますが、非常に高速に実行できるシステムに膨大な量のデータを挿入しようとしているときに特に覚えておくことが重要です。
最初の方法では、phpコードは挿入しようとしているすべての値を検証します。e)番号の値を挿入する場合は純粋な番号かどうかチェックします(使用しているスクリプトのプログラミングロジックに依存します)
ヒント1で説明したように、データベースに挿入し、データベースへの接続を取得する必要があります。 接続を取得した後、文を実行する必要があります(上記の解析は、データベースサーバのコーディングロジックに従って)オーバーヘッドに追加されます。
PHPはすべての挿入ステートメントをデータベースサーバーに送信します(挿入アルゴリズムの場合)。そしてそれはアプリケーションサーバー〜データベースサーバー〜アプリケーションサーバーロジックは、より多くの遅延を追加します。 DBサーバの場合
それがよりそれがPHP
バリデーションについての発言は必ずしも正しいとは限りませんが、多くのPHPプログラムは、MySQLをそのままにしておくと、エスケープしてワイヤーで発火させるだけです。 – tadman
私はそれがphpスクリプトの設計ロジック上のすべてのdepents、それよりも、アプリケーションサーバーにデータベースサーバーにappserverは、PHPの挿入にいくつかの頭を追加する –
その理由は、PHPがデータベースに接続する必要があります作成するすべての単一のinsert文のためのすべての単一のスレッド?しかし、私は一緒に挿入ステートメントに参加し、それはまだexcuteに多くの時間が必要です。 – James
- 1. PHPの::と - の違いは?
- 2. SQLとPL-SQLとT-SQLの違いは何ですか?
- 3. SQL ServerとADO.NETのトランザクションの違いは?
- 4. OracleとSQL ServerのNVARCHARの違いは?
- 5. sqlとmysqlの違い
- 6. JPA:JQLとSQLの違い
- 7. SQL文と句の違い
- 8. SQLiteとSQLの違い
- 9. 'OR'と '||'の違いSQLで?
- 10. Spark SQLとHiveの違い
- 11. 違いは、PHP
- 12. SQLプロシージャとCLRプロシージャの違いは?
- 13. SQL Serverログインアカウントとデータベースユーザーの違いは?
- 14. テーブル(SQL)とコレクション(Mongo)の違いは?
- 15. Apache Spark SQLとMongoDBの違いは?
- 16. SQL Azure Webとビジネスエディションの違いは?
- 17. PHPのオブジェクトとクラスの違いは?
- 18. PHP 5.3.10とPHP 5.3.29のコードの違い
- 19. C#とPHP OOPの違い
- 20. PHPの違いarray()と[]
- 21. MySQLとPHPの間違い
- 22. php:例外とRuntimeExceptionの違いは?
- 23. SQL Plusと「通常の」SQLの違いは?
- 24. <の違いは? <?php
- 25. SQL AzureとSQL Serverの違いは何ですか?
- 26. 論理SQLと物理SQLの違いは何ですか?
- 27. 静的SQLと動的SQLの違いは何ですか?
- 28. SQLとSQL * Plusの違いは何ですか?
- 29. WHEREのINとORのSQLの違い
- 30. php cliとphp cgiの違いは何ですか?
PHPのバージョンは5.3であり、データベースのタイプは、MySQLであり、そして5.5バージョンよりも早くなければならないインサート何のわずか数であります。 – James