この背景については、以下を参照してください: UNIQUE (複合 4 列) を持つテーブルの主キーが必要ですか?そのうちの 1 つを NULL にすることができますか?
私の質問は非常に簡単です:
- 別のデータベースから同期された製品価格情報を保持するテーブルがあります。このテーブルには、クライアントによって制御されるフィールドが 1 つだけあり、残りのフィールドは削除され、同期時に時々再挿入されます (たとえば、1 日 1 回から 1 週間に 1 回、PHP スクリプトを使用してクライアントが手動で実行します)。 )。
1) テーブルには 4 つの列 (そのうちの 1 つは null の可能性があります) にインデックスがあり、3 つの非 null 列には別の部分インデックスがあります。テーブルの約 90% を削除してデータを再挿入する場合、インデックスも削除して、すべてのデータがテーブルにある後に再作成するのが良いですか、それとも単純にインデックスを「そのまま」維持する方が良いですか? ?
Erwin Brandstetter によって提案された別のアプローチに切り替えました。
CREATE TEMP TABLE pr_tmp AS
SELECT * FROM product_pricebands WHERE my_custom_field IS TRUE;
TRUNCATE product_pricebands;
INSERT INTO product_pricebands SELECT * FROM pr_tmp;
これは非常にうまく機能しているように見えるので、インデックスを削除して再作成する必要があるかどうか、またはなぜこれを行う必要があるのか わかりません。助言がありますか?
2) また、スクリプトのパフォーマンスを測定するにはどうすればよいですか? 私は実際に知りたい:
CREATE TEMP TABLE pr_tmp AS
SELECT * FROM product_pricebands WHERE my_custom_field IS TRUE;
TRUNCATE product_pricebands;
INSERT INTO product_pricebands SELECT * FROM pr_tmp;
よりも優れたパフォーマンスを持っています
DELETE FROM product_pricebands WHERE my_custom_field IS TRUE;
PHP経由でこれを伝えることはできますか? EXPLAIN ANALYZE を試してみましたが、上記のような一連のステートメントに対して機能するかどうかわかりません。
どうもありがとう!