有关这方面的背景,请参阅:我的表是否需要一个主键,它有一个 UNIQUE(复合 4 列),其中一个可以为 NULL?
我的问题很简单:
- 我有一个包含产品定价信息的表,从另一个数据库同步。此表中只有一个字段由客户端控制,其余字段在同步时每隔一段时间删除并重新插入(例如,每天一次到每周一次,由客户端使用 PHP 脚本手动运行)。
1) 该表在 4 列上有一个索引(其中一个可以为空),在 3 个非空列上有另一个部分索引。当您删除大约 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 但我不确定这是否适用于上述一组语句?
非常感谢!