私は、アップロードするマシンで CSV (所定の形式) を選択できるクライアント用のアップローダ (php を使用) をセットアップしています。CSV には 4000 ~ 5000 行が含まれる可能性があります。Php は、CSV の各行を読み取り、DB テーブルに直接挿入することで、ファイルを処理します。その部分は簡単です。
ただし、理想的には、このデータをデータベース テーブルに追加する前に、3 つの列 (A、B、および C) を確認し、それらの 3 つのフィールドの一致する組み合わせが既にテーブルにあるかどうかを確認します AND IFそのため、追加するのではなく、その行を更新したいと思います。これらの 3 つの列の一致する組み合わせがない場合は、先に進んで行を INSERT し、データをテーブルに追加します。
私の最初の考えは、列A、B、およびCをテーブルの一意のインデックスにしてから、すべての行を挿入し、「失敗した」INSERTを検出して(一意のインデックスの制限により)、更新を行うことができるということです。 . この方法は、テーブルに既に一致するコンボがあるかどうかを確認するためだけに、行ごとに個別の SELECT クエリを作成するよりも効率的であると思われます。
3 番目のアプローチは、MySQL の一意のインデックスを使用せずに単純に EVERYTHING を追加し、クライアントが後でそのテーブルをクエリするときに最新の一意の組み合わせのみを取得することです。ただし、そのテーブルに大量の無駄なデータが含まれないようにしています。
ベスト プラクティスや巧妙なアプローチについての考えはありますか?