您的當前位置: 首頁(yè) > AI運營(yíng)推廣
發(fā)布時(shí)間:2026-05-04 18:01:17 瀏覽:79 次
關(guān)鍵字:批量數據導入,詳解性數據加載,提升大量插入,(??ヮ?)?*:???批量加快,數據提升速度
提升批量數據導入的導入的方法亦是如此??,沒(méi)有何種方法是種方最優(yōu)的,應用任何方法前根據自己的詳解性實(shí)際情況權衡利弊,??做出選擇。提升
批量導(dao)入數據之前,批量無(wú)論采取何種方式,務(wù)必做好相應的備份。
導入完成后亦需對相應對象進(jìn)行ANALYZE操作,這樣查詢(xún)優(yōu)化器才會(huì )按照最新的統計信息生成正確的執行計劃。
下面正式介紹提(ti)升批量數據導入性能的(de)n種方法。
方法1:禁用自動(dòng)提交。
psql
\set AUTOCOMMIT off
其他
BEG(//ω//)IN??;
執行批量數據導入
COM??MIT;
方法2:設置表為UNLOGGED。
導入數據之前先把表改成UNLOGGED模式,導入完成后改回LOGGED模式。
ALTER TABLE tablenam??e SET UNLOGGED;
執行批量數據導入
ALTER TABLE tablename LOGGED;
導入信息不記錄WAL日志,極大減少io,提升導入速度。
缺點(diǎn):
1.在replication環(huán)境下,表無(wú)法設置為UNLOGGED模式。
方法3:重建索引。
導入數據之前先刪除相關(guān)表上的索引,導入完成后重新創(chuàng )建之。
DROP INDEX indexname;
執行批量數據導入
CREATE INDEX ...;
查詢(xún)表上索引定義的方法
1select * from pg_indexes where tablename ='tablen(?????)ame' and schemaname = 'schemaname';
方法4:重建外鍵。
導入數據之前先刪除相關(guān)表上的外鍵,導入完成后??重新創(chuàng )建之。
ALTER TABLE ...
DROP CONSTRAINT ... ;
執行批量數據導入
AL??TER TABLE ...ヽ(′▽?zhuān)?/
ADD CONSTRAINT ...
FOREIGN KEY ...
R(′?`*)EFER(???)ENC( ?▽?)ES ...;
相關(guān)信息可查詢(xún)pg_constraint。
方法5:停用觸發(fā)器??
導入數據之前先DISABLE掉相關(guān)表上的觸發(fā)器??,導入完成后重新??ENABLE之。
ALTER TABLE tablename(????) DISA(°o°)BLE TRIGGER ALL;
執行批量數據導入
ALTER TABLE tablename ENABLE TRIGGER ALL;
相關(guān)信息可查詢(xún)pg_tr??igger。
方法6:insert改copy
COPY針對批量數據加載進(jìn)行了優(yōu)化。
1COPY ... FROM(′_`) 'xxx';
方法7:?jiǎn)沃礽nser(′?ω?`)t改多值insert
減少sql解析的時(shí)間。
方法8:insert改PREPARE
通過(guò)??使用PREPARE預備語(yǔ)句,降低解析消耗。
PREPARE fooplan (int, text, bool, numeric) AS
INSERT INTO foo VALUES($1, $2, $3, $4);
EXEC(′?_?`)UTE fooplan(1, 'Hunter Valley', 't', 20(′?`*)0.00);
方法9:修改參數
增大maintenance_work_mem,增大max_wal_size。
方法10:關(guān)閉歸檔模式,降低wal日志級別。
此法需要重啟數據庫,需要規劃停機時(shí)間??(jian)。此(ci)外如有replication備庫,還需考慮對其影響。
文章來(lái)源:腳本之(zhi)家
來(lái)源地址:https??://www.jb51.net/article/2073?36.htm
