mysql では、php を組み合わせて mysql にいくつかのファイルをインポートします。インポート時の 15,000 レコードの分析と最適化を共有します。
過去に、Tiandi が最近、電話番号を数える小さなプロジェクトを友人に手伝っていると述べた記事がいくつかありました。そのたびに、パッケージ化された電話番号がニーズに応じてデータベースからランダムに生成され、人々は絶えず電話をかけてきました。製品を販売するための電話番号です (そのような行為は少し軽蔑されます)。でも、友達が助けを求めてきたら、私たちも助けないといけないですよね?プログラムは2週間前に完成し、テスト後に引き渡された。数日前、友人から電話があり、電話番号のインポートに毎日時間がかかっている、10,000 件のレコードをインポートするのに 30 分以上かかることがある、ということを改善する方法を見つけたいとのことでした。スピード。
データベースの構造は非常に単純で、1 つのフィールドには電話番号が格納され、もう 1 つのフィールドにはカテゴリが格納されていると考えられます。 . はそれぞれ、この電話がダイヤルされていないこと、この電話がダイヤルされていないことなどを表します。プログラム全体のロジックは次のとおりです。
■電話番号が記載されたtxtファイルを受け取りました
■プログラムを通じてtxtファイルをmysqlにインポートします
■インポート時にtxtの電話番号とmysqlの電話番号が重複していないか確認し、重複していない場合は直接新規レコードを挿入してください。所属しています。
インポート時にテキスト内の各電話番号を比較する必要があるため、プログラムに時間がかかることは間違いありません。この理由は今は置いといて、この記事のタイトルは書き込み速度の最適化であるため、プログラムはいつ書き込みますか。記録はどこにありますか?上記のロジックから、データベースを照合するときに、レコードが見つからない場合はデータベースへの書き込み操作が発生することがわかります (もちろん、更新も考慮されますが、ここでは挿入についてのみ説明します)。次に、上記のロジックを次のようなコードに変換します。
コードをコピー | |
//$array は txt ファイルから展開された配列で、それぞれは電話番号、$str は型です
for($i=0; $i |
コードをコピー | |
for($i=0; $i $tmpstr = "'". $array[$i] ."','". $str ."'"; $sql2 .= "(".$tmpstr."),"; } $sql2 = substr($sql2,0,-1) //最後のカンマを削除します mysql_query($sql2); |