- 论坛徽章:
- 3
|
在每个表的大规模更新后,加上analyze <tablename>;语句。因为每次更新后马上执行查询,统计信息还没有收集上来,会导致差的执行计划,所以要手工执行analyze <tablename>收集统计信息,保证后续的SQL的执行计划正确。而你分开执行快的原因是你等了一会儿,数据库自动帮你收集了统计信息的原因。我加上analyze <tablename>语句后,在我的笔记本上1分54秒就可以运行出来了:
osdba-mac:pgtest osdba$ time psql u01 -f 升星.sql > my2.log
real 1m54.936s
user 0m0.235s
sys 0m0.015s
加analyze的示例如下:
....
insert into equipment.player_equip_star_value(career, lv, god_type, star)
select a.career, a.lv, a.god_type, b.star
from
player.sum_up_player_basic a,
config.basic_star_open b
order by a.career, a.lv, a.god_type, b.star
;
create index on equipment.player_equip_star_value(career);
create index on equipment.player_equip_star_value(lv);
create index on equipment.player_equip_star_value(god_type);
create index on equipment.player_equip_star_value(star);
create index on equipment.player_equip_star_value(career, lv, star);
analyze equipment.player_equip_star_value;
.... |
|