データベースにあるテーブルを変更して、特定のアイテムより多くの情報を保存できるようにするには、supplier
。次のように私は1つのテーブルを持っている:このMySQLの声明を速めるインデックス
製品(〜285000行)
- が
- supplier_name
- バーコード
- ...
PRODUCT_IDそして、作成したいですさらに2つのテーブル:
サプライヤー:
- SUPPLIER_ID(
UUID
) - 名(製品テーブルから)
- 接触
- ...
サプライヤー製品:
- PRODUCT_ID(製品FK)
- SUPPLIER_ID(サプライヤーFK)
- 配信オプション
- ...
supplier
テーブルニーズを区別エントリを充填することproduct
テーブルのsupplier_name
。 supplier_product
テーブルにはsupplier
テーブルのUUID
が必要です。これまで
私のSQLは次のとおりです。
INSERT INTO supplier (name, id)
SELECT DISTINCT(TRIM(supplier)), UUID() FROM product
WHERE supplier_name IS NOT NULL AND TRIM(supplier_name) != ""
AND TRIM(supplier_name) NOT IN (
SELECT name FROM supplier
);
は〜4000行を作成します。次に、
INSERT INTO supplier_product (id, supplier_id, product_id, barcode, ...)
SELECT UUID(), s.id, p.product_id, p.barcode, ...
FROM product p
INNER JOIN supplier s ON TRIM(p.supplier_name) = s.name
WHERE s.name IS NOT NULL;
クエリは現在30秒後にタイムアウトしています。これらの2つのテーブルを移入するより良い方法はありますか?
このように多くのテーブルを作成することは、私が頻繁に実行したパターンなので、より最適な方法があればいくつかのアドバイスをいただければ幸いです。
TRIMを取り除く。これにより、索引を使用できなくなります。データをトリミングする必要がある場合は、データベースでトリミングします。 – EJP