我有一个'insert into table()select from',它非常慢。
选择仅需3秒。
但是要插入3万行,则需要3分钟以上的时间。
3万行需要3分钟,对我来说似乎很多(因为在“真实”状态下我将拥有数百万行)。
我尝试了许多postgres优化,但并没有真正改善: wal_buffers = 8MB,fsync = off等...
我简化了请求,以了解为什么它这么慢。
这是我的要求:
drop table if exists ODSBUS.DIM_INSCRIPTIONS_ETUDIANTS_TEST;
create table ODSBUS.DIM_INSCRIPTIONS_ETUDIANTS_TEST (
ID_INSCRIPTION_ETU VARCHAR(5),
ID_NUM_INSCRIPTION_ETU VARCHAR(5) ,
ID_HISTORIQUE VARCHAR(5) ,
ID_INSCRIPTION_AP VARCHAR(5) ,
ID_SEMESTRE VARCHAR(5) ,
ID_PARITE_SEMESTRE VARCHAR(5) ,
ID_ETUDIANT VARCHAR(5) ,
ID_AP VARCHAR(5) ,
ID_EC VARCHAR(5) ,
ID_OBLIGATION_EC VARCHAR(5) ,
ID_UE VARCHAR(5) ,
ID_COMPOSANTE VARCHAR(5) ,
ID_BOURSE VARCHAR(5) ,
ID_ANNEE VARCHAR(5) ,
FG_NEOBACHELIER VARCHAR(5) ,
FG_AP_MAJEUR VARCHAR(5) ,
DT_DEMISSION VARCHAR(5) ,
FG_DEMISSIONNAIRE VARCHAR(5)
);
-- the insert
insert into odsbus.DIM_INSCRIPTIONS_ETUDIANTS_TEST (id_inscription_etu,
id_num_inscription_etu,
id_historique,
id_inscription_ap,
id_semestre,
id_parite_semestre,
id_etudiant,
id_ap,
id_ec,
id_obligation_ec,
id_ue,
id_composante,
id_bourse,
id_annee,
fg_neobachelier,
fg_ap_majeur,
dt_demission,
fg_demissionnaire)
SELECT '',
'' ,
'' ,
'' ,
'' ,
'' ,
'' ,
'' ,
'' ,
'',
'' ,
'' ,
'' ,
'' ,
'',
'',
'',
''
FROM ldzbus.scol_inscription_ap ap
inner join dwhbus.dim_annees da on da.id_annee = ap.fann_key
inner join ldzbus.scol_inscription_etudiant sie on sie.fann_key = ap.fann_key and sie.idipl_numero = ap.idipl_numero
inner join odsbus.dim_etudiants et on et.id_numero = sie.etud_numero
inner join ldzbus.v_scol_maquette maq on maq.mrap_key = ap.mrap_key
inner join ldzbus.scol_inscription_ec iec on iec.idipl_numero = ap.idipl_numero and iec.mrec_key = maq.mrec_key and iec.imrec_semestre = ap.imrap_semestre
inner join ldzbus.scol_inscription_semestre sis on sis.idipl_numero = ap.idipl_numero and sis.mrsem_key = maq.mrsem_key
inner join ldzbus.scol_maquette_repartition_ec smre on smre.mrec_key = maq.mrec_key
inner join ldzbus.dept_domaine dd on dd.fdom_code = sie.fdom_code
inner join ldzbus.historique h on h.hist_numero = sie.hist_numero
inner join ldzbus.scol_maquette_repartition_ap smra on smra.mrap_key = ap.mrap_key
WHERE 1=1
limit 30000;
--> more than 3 min
请注意,请求使用许多不同的架构。
我怎样才能使此插入花费的时间更少? 专注于请求?专注于调整postgres吗?调整服务器?
我在这里的所有pg选项:https://controlc.com/6489bca0