2016-07-21 10 views
-3

私は600レコードのファイルを持っています。これはデータベースから1500万レコードと比較する予定です。それぞれの優れたレコードについて、私は1500万レコードから試合を見つける必要があります。現在、プロセスの完了には約4時間かかります。私は少なくとも2時間それを最小化したい。1500万レコードで高速検索する方法

答えて

4
  1. 輸出は、MySQLにインポートするCSV(LOAD)
  2. は15Mレコードことを確認して、キー列(あなたは15Mレコードと比較したい1)
  3. にインデックスを作成してCSV
  4. エクセルテーブルには、比較キーに適切なインデックスが設定されています。
  5. 2つのテーブルを必要な条件で結合する簡単なクエリを作成します。

これらの点はすべて非常に些細なものであり、読者には練習問題として残されています。

+0

私はデータを検索するのに5列を使用しています。私がcsvをmysqlにインポートするとどうすれば助けになるのですか、実際には次のステップは一致するデータをExcelファイルに書き込むことです。現在、PHPを使用して各レコードを読み取り、1500万レコードと比較しています –

+0

内部のmysql検索がファイルをループしてからPHPを実行し、mysqlを実行するよりも何百倍も高速です。現在の方法で、フォークを使ってスープを食べようとしています。私はあなたにスプーンを見せている。私が言っていることを却下する前に、試してみてください。 –

+0

そして、mysqlでデータをインポートすることができるので、それをCSVにエクスポートして、そのプロセスを逆に行うことができます。 –

1

インデックスがを行っていない場合

をお試しください: はあなたが比較されているフィールド全体にインデックス付けを行い、その結果は、魔法のだろう。

可能であれば、LIKEクエリを使用してWHEREクエリのシーケンスを変更しないでください。

例:WHERE city = "New York" AND name LIKE "XYZ" AND mobile=7777777777 AND status=1

それは

WHERE status=1 AND mobile=7777777777 AND city = "New York" AND name LIKE "XYZ" 

のようなフラグのSEQUENCEである必要があり、最後に同じようなVARCHARその後、その後、文字、それは多くの重要その後、int型。

+0

私はこれを試してみましょう。私は非常に奇妙なシーケンスがあります。 suggetionのおかげで –

関連する問題