婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > postgresql 13.1 insert into select并行查詢的實現(xiàn)

postgresql 13.1 insert into select并行查詢的實現(xiàn)

熱門標簽:移動外呼系統(tǒng)模擬題 電話機器人怎么換人工座席 400電話申請客服 江蘇400電話辦理官方 廣州電銷機器人公司招聘 天津開發(fā)區(qū)地圖標注app 濟南外呼網(wǎng)絡電話線路 地圖標注要花多少錢 電銷機器人能補救房產(chǎn)中介嗎

本文信息基于PG13.1。

從PG9.6開始支持并行查詢。PG11開始支持CREATE TABLE … AS、SELECT INTO以及CREATE MATERIALIZED VIEW的并行查詢。

先說結論:

換用create table as 或者select into或者導入導出。

首先跟蹤如下查詢語句的執(zhí)行計劃:

select count(*) from test t1,test1 t2 where t1.id = t2.id ;
postgres=# explain analyze select count(*) from test t1,test1 t2 where t1.id = t2.id ;
                  QUERY PLAN                  
-------------------------------------------------------------------------------------------
Finalize Aggregate (cost=34244.16..34244.17 rows=1 width=8) (actual time=683.246..715.324 rows=1 loops=1)
 -> Gather (cost=34243.95..34244.16 rows=2 width=8) (actual time=681.474..715.311 rows=3 loops=1)
   Workers Planned: 2
   Workers Launched: 2
   -> Partial Aggregate (cost=33243.95..33243.96 rows=1 width=8) (actual time=674.689..675.285 rows=1 loops=3)
    -> Parallel Hash Join (cost=15428.00..32202.28 rows=416667 width=0) (actual time=447.799..645.689 rows=333333 loops=3)
      Hash Cond: (t1.id = t2.id)
      -> Parallel Seq Scan on test t1 (cost=0.00..8591.67 rows=416667 width=4) (actual time=0.025..74.010 rows=333333 loops=3)
      -> Parallel Hash (cost=8591.67..8591.67 rows=416667 width=4) (actual time=260.052..260.053 rows=333333 loops=3)
       Buckets: 131072 Batches: 16 Memory Usage: 3520kB
       -> Parallel Seq Scan on test1 t2 (cost=0.00..8591.67 rows=416667 width=4) (actual time=0.032..104.804 rows=333333 loops=3)
 Planning Time: 0.420 ms
 Execution Time: 715.447 ms
(13 rows)

可以看到走了兩個Workers。

下邊看一下insert into select:

postgres=# explain analyze insert into va select count(*) from test t1,test1 t2 where t1.id = t2.id ;   
                 QUERY PLAN                 
-------------------------------------------------------------------------------------------
Insert on va (cost=73228.00..73228.02 rows=1 width=4) (actual time=3744.179..3744.187 rows=0 loops=1)
 -> Subquery Scan on "*SELECT*" (cost=73228.00..73228.02 rows=1 width=4) (actual time=3743.343..3743.352 rows=1 loops=1)
   -> Aggregate (cost=73228.00..73228.01 rows=1 width=8) (actual time=3743.247..3743.254 rows=1 loops=1)
    -> Hash Join (cost=30832.00..70728.00 rows=1000000 width=0) (actual time=1092.295..3511.301 rows=1000000 loops=1)
      Hash Cond: (t1.id = t2.id)
      -> Seq Scan on test t1 (cost=0.00..14425.00 rows=1000000 width=4) (actual time=0.030..421.537 rows=1000000 loops=1)
      -> Hash (cost=14425.00..14425.00 rows=1000000 width=4) (actual time=1090.078..1090.081 rows=1000000 loops=1)
       Buckets: 131072 Batches: 16 Memory Usage: 3227kB
       -> Seq Scan on test1 t2 (cost=0.00..14425.00 rows=1000000 width=4) (actual time=0.021..422.768 rows=1000000 loops=1)
 Planning Time: 0.511 ms
 Execution Time: 3745.633 ms
(11 rows)

可以看到并沒有Workers的指示,沒有啟用并行查詢。

即使開啟強制并行,也無法走并行查詢。

postgres=# set force_parallel_mode =on;
SET
postgres=# explain analyze insert into va select count(*) from test t1,test1 t2 where t1.id = t2.id ;
                 QUERY PLAN                 
-------------------------------------------------------------------------------------------
Insert on va (cost=73228.00..73228.02 rows=1 width=4) (actual time=3825.042..3825.049 rows=0 loops=1)
 -> Subquery Scan on "*SELECT*" (cost=73228.00..73228.02 rows=1 width=4) (actual time=3824.976..3824.984 rows=1 loops=1)
   -> Aggregate (cost=73228.00..73228.01 rows=1 width=8) (actual time=3824.972..3824.978 rows=1 loops=1)
    -> Hash Join (cost=30832.00..70728.00 rows=1000000 width=0) (actual time=1073.587..3599.402 rows=1000000 loops=1)
      Hash Cond: (t1.id = t2.id)
      -> Seq Scan on test t1 (cost=0.00..14425.00 rows=1000000 width=4) (actual time=0.034..414.965 rows=1000000 loops=1)
      -> Hash (cost=14425.00..14425.00 rows=1000000 width=4) (actual time=1072.441..1072.443 rows=1000000 loops=1)
       Buckets: 131072 Batches: 16 Memory Usage: 3227kB
       -> Seq Scan on test1 t2 (cost=0.00..14425.00 rows=1000000 width=4) (actual time=0.022..400.624 rows=1000000 loops=1)
 Planning Time: 0.577 ms
 Execution Time: 3825.923 ms
(11 rows)

原因在官方文檔有寫:

The query writes any data or locks any database rows. If a query contains a data-modifying operation either at the top level or within a CTE, no parallel plans for that query will be generated. As an exception, the commands CREATE TABLE … AS, SELECT INTO, and CREATE MATERIALIZED VIEW which create a new table and populate it can use a parallel plan.

解決方案有如下三種:

1.select into

postgres=# explain analyze select count(*) into vaa from test t1,test1 t2 where t1.id = t2.id ;
                  QUERY PLAN                  
-------------------------------------------------------------------------------------------
Finalize Aggregate (cost=34244.16..34244.17 rows=1 width=8) (actual time=742.736..774.923 rows=1 loops=1)
 -> Gather (cost=34243.95..34244.16 rows=2 width=8) (actual time=740.223..774.907 rows=3 loops=1)
   Workers Planned: 2
   Workers Launched: 2
   -> Partial Aggregate (cost=33243.95..33243.96 rows=1 width=8) (actual time=731.408..731.413 rows=1 loops=3)
    -> Parallel Hash Join (cost=15428.00..32202.28 rows=416667 width=0) (actual time=489.880..700.830 rows=333333 loops=3)
      Hash Cond: (t1.id = t2.id)
      -> Parallel Seq Scan on test t1 (cost=0.00..8591.67 rows=416667 width=4) (actual time=0.033..87.479 rows=333333 loops=3)
      -> Parallel Hash (cost=8591.67..8591.67 rows=416667 width=4) (actual time=266.839..266.840 rows=333333 loops=3)
       Buckets: 131072 Batches: 16 Memory Usage: 3520kB
       -> Parallel Seq Scan on test1 t2 (cost=0.00..8591.67 rows=416667 width=4) (actual time=0.058..106.874 rows=333333 loops=3)
 Planning Time: 0.319 ms
 Execution Time: 783.300 ms
(13 rows)

2.create table as

postgres=# explain analyze create table vb as select count(*) from test t1,test1 t2 where t1.id = t2.id ;
                  QUERY PLAN                  
-------------------------------------------------------------------------------------------
 Finalize Aggregate (cost=34244.16..34244.17 rows=1 width=8) (actual time=540.120..563.733 rows=1 loops=1)
 -> Gather (cost=34243.95..34244.16 rows=2 width=8) (actual time=537.982..563.720 rows=3 loops=1)
   Workers Planned: 2
   Workers Launched: 2
   -> Partial Aggregate (cost=33243.95..33243.96 rows=1 width=8) (actual time=526.602..527.136 rows=1 loops=3)
    -> Parallel Hash Join (cost=15428.00..32202.28 rows=416667 width=0) (actual time=334.532..502.793 rows=333333 loops=3)
      Hash Cond: (t1.id = t2.id)
      -> Parallel Seq Scan on test t1 (cost=0.00..8591.67 rows=416667 width=4) (actual time=0.018..57.819 rows=333333 loops=3)
      -> Parallel Hash (cost=8591.67..8591.67 rows=416667 width=4) (actual time=189.502..189.503 rows=333333 loops=3)
       Buckets: 131072 Batches: 16 Memory Usage: 3520kB
       -> Parallel Seq Scan on test1 t2 (cost=0.00..8591.67 rows=416667 width=4) (actual time=0.023..77.786 rows=333333 loops=3)
 Planning Time: 0.189 ms
 Execution Time: 565.448 ms
(13 rows)

3.或者通過導入導出的方式,例如:

psql -h localhost -d postgres -U postgres -c "select count(*) from test t1,test1 t2 where t1.id = t2.id " -o result.csv -A -t -F ","
psql -h localhost -d postgres -U postgres -c "COPY va FROM 'result.csv' WITH (FORMAT CSV, DELIMITER ',', HEADER FALSE, ENCODING 'windows-1252')"

一些場景下也會比非并行快。

補充:POSTGRESQL: 動態(tài)SQL語句中不能使用SELECT INTO?

我的數(shù)據(jù)庫版本是 PostgreSQL 8.4.7 。 下面是出錯的存儲過程:

CREATE or Replace FUNCTION func_getnextid(
 tablename varchar(240),
 idname varchar(20) default 'id')
RETURNS integer AS $funcbody$
Declare
 sqlstring varchar(240);
 currentId integer;
Begin
 sqlstring:= 'select max("' || idname || '") into currentId from "' || tablename || '";';
 EXECUTE sqlstring;
 if currentId is NULL or currentId = 0 then
  return 1;
 else
  return currentId + 1;
 end if;
End;
$funcbody$ LANGUAGE plpgsq

執(zhí)行后出現(xiàn)這樣的錯誤:

SQL error:

ERROR: EXECUTE of SELECT ... INTO is not implemented

CONTEXT: PL/pgSQL function "func_getnextbigid" line 6 at EXECUTE statement

改成這樣的就對了:

CREATE or Replace FUNCTION func_getnextid(
 tablename varchar(240),
 idname varchar(20) default 'id')
RETURNS integer AS $funcbody$
Declare
 sqlstring varchar(240);
 currentId integer;
Begin
 sqlstring:= 'select max("' || idname || '") from "' || tablename || '";';
 EXECUTE sqlstring into currentId;
 if currentId is NULL or currentId = 0 then
  return 1;
 else
  return currentId + 1;
 end if;
End;
$funcbody$ LANGUAGE plpgsql;

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • postgresql insert into select無法使用并行查詢的解決
  • mysql 中 replace into 與 insert into on duplicate key update 的用法和不同點實例分析
  • SELECT INTO 和 INSERT INTO SELECT 兩種表復制語句詳解(SQL數(shù)據(jù)庫和Oracle數(shù)據(jù)庫的區(qū)別)
  • php mysql insert into 結合詳解及實例代碼
  • PHP+MySQL之Insert Into數(shù)據(jù)插入用法分析
  • 正確使用MySQL INSERT INTO語句
  • MySql中使用INSERT INTO語句更新多條數(shù)據(jù)的例子
  • SQL insert into語句寫法講解

標簽:濮陽 杭州 榆林 辛集 海西 昭通 寶雞 溫州

巨人網(wǎng)絡通訊聲明:本文標題《postgresql 13.1 insert into select并行查詢的實現(xiàn)》,本文關鍵詞  postgresql,13.1,insert,into,select,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《postgresql 13.1 insert into select并行查詢的實現(xiàn)》相關的同類信息!
  • 本頁收集關于postgresql 13.1 insert into select并行查詢的實現(xiàn)的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲高清久久久| 95精品视频在线| 成人av电影在线观看| 久久久久久久久久看片| 亚洲精品视频在线观看免费| av电影在线观看一区| 制服丝袜av成人在线看| 久久久久亚洲综合| 精品一区精品二区高清| 欧美色网站导航| 亚洲综合在线视频| 欧美三级中文字| 亚洲国产视频一区| 日韩欧美电影在线| 国产一区二区在线观看免费| 精品国内片67194| 欧美三级蜜桃2在线观看| 亚洲第一搞黄网站| 亚洲欧美综合网| 9l国产精品久久久久麻豆| 亚洲日本乱码在线观看| 欧美日韩和欧美的一区二区| 美女视频黄 久久| 久久日韩精品一区二区五区| 99麻豆久久久国产精品免费| 亚洲gay无套男同| 久久夜色精品一区| 亚洲欧美国产高清| 国模冰冰炮一区二区| 久久精品一区二区| 国产精品正在播放| 亚洲综合偷拍欧美一区色| 天天色综合天天| 蜜桃视频第一区免费观看| 一本色道**综合亚洲精品蜜桃冫| 午夜电影一区二区三区| 成人免费毛片嘿嘿连载视频| 亚洲免费观看高清完整版在线观看 | 欧美videossexotv100| 国产精品1024| 亚洲成人免费视频| 国产精品丝袜久久久久久app| 欧美日韩久久一区二区| 亚洲不卡一区二区三区| 国产日产欧美一区二区三区| 欧美日韩高清在线| 成人激情开心网| 天使萌一区二区三区免费观看| 麻豆精品新av中文字幕| 亚洲蜜桃精久久久久久久| 国产精品国产三级国产a | 91女人视频在线观看| 天天操天天综合网| 国产精品国产精品国产专区不蜜| 欧美日韩二区三区| 色噜噜夜夜夜综合网| 国产精品66部| 美国av一区二区| 日韩中文字幕一区二区三区| 国产精品久久久久久久久久久免费看| 国产精品二三区| 日本丰满少妇一区二区三区| 亚洲综合免费观看高清完整版在线| 亚洲国产精品国自产拍av| 精品久久免费看| 日韩欧美一区二区不卡| 欧美高清视频在线高清观看mv色露露十八 | 久久女同性恋中文字幕| 56国语精品自产拍在线观看| 成人动漫一区二区在线| 国产在线乱码一区二区三区| 久久国产精品免费| 日韩国产一二三区| 亚洲妇熟xx妇色黄| 2023国产精华国产精品| 日韩免费一区二区| 日韩欧美中文字幕制服| 欧美mv和日韩mv的网站| 久久综合久久综合久久综合| 日韩一区二区三区免费观看| 欧美一区二区视频在线观看2022| 91麻豆精品国产| 在线中文字幕一区| 欧美一区二区免费视频| 日韩欧美中文一区二区| 精品剧情v国产在线观看在线| 久久久久88色偷偷免费| 国产精品传媒在线| 中文字幕亚洲精品在线观看| 一区二区三区中文字幕电影| 夜夜嗨av一区二区三区网页 | 国产精品午夜久久| 国产精品高潮久久久久无| 中文字幕亚洲一区二区av在线| 久久久久久久久久看片| 国产精品免费视频观看| 亚洲影院免费观看| 奇米在线7777在线精品| 国产成人免费9x9x人网站视频| 成人黄色大片在线观看| 欧美性xxxxxxxx| 成人av第一页| 欧美日韩亚洲丝袜制服| 精品国产一区二区亚洲人成毛片| 久久日韩精品一区二区五区| 国产精品福利一区二区三区| 亚洲一区二区三区美女| 亚洲视频一区二区在线| 午夜欧美大尺度福利影院在线看| 免费成人在线影院| 高清成人在线观看| 欧美精品丝袜久久久中文字幕| 欧美精品一区二区不卡| 亚洲欧美激情视频在线观看一区二区三区 | 加勒比av一区二区| 97精品久久久久中文字幕| 91精品国产麻豆| 蜜臀久久99精品久久久久宅男| 成人av网在线| 亚洲小说春色综合另类电影| 日韩三级免费观看| av成人免费在线| 日韩成人午夜精品| 久久精品无码一区二区三区| 91免费精品国自产拍在线不卡| 日韩中文字幕亚洲一区二区va在线| 精品久久99ma| 91丨porny丨中文| 免费欧美日韩国产三级电影| 亚洲国产精品二十页| 在线观看不卡视频| 狠狠色狠狠色综合| 综合久久给合久久狠狠狠97色| 精品视频在线看| 国产精品一区二区视频| 亚洲一区二区视频| 国产拍欧美日韩视频二区| 欧美亚洲日本国产| 国产成人午夜精品5599| 视频一区中文字幕| 国产精品国产自产拍在线| 7777精品伊人久久久大香线蕉最新版 | 国产一区二区三区国产| 夜夜嗨av一区二区三区网页| 久久久久国色av免费看影院| 欧美撒尿777hd撒尿| 不卡在线视频中文字幕| 美腿丝袜亚洲三区| 一区二区高清视频在线观看| 欧美国产一区二区在线观看| 日韩欧美一区在线| 欧美日韩亚洲高清一区二区| 91亚洲精品久久久蜜桃网站| 激情六月婷婷久久| 亚洲午夜国产一区99re久久| 国产精品久久国产精麻豆99网站| 日韩欧美高清一区| 91电影在线观看| 97精品视频在线观看自产线路二| 美脚の诱脚舐め脚责91 | 欧美变态口味重另类| 欧美日韩国产一区| 色先锋aa成人| 91免费视频观看| av电影一区二区| jvid福利写真一区二区三区| 国产成人亚洲综合a∨婷婷| 黄一区二区三区| 秋霞影院一区二区| 婷婷久久综合九色综合伊人色| 亚洲乱码日产精品bd| 中文字幕一区二区三区在线观看| 久久精品在线观看| 国产亚洲精品bt天堂精选| www成人在线观看| 欧美精品一区视频| 久久亚洲欧美国产精品乐播| 欧美xxxxxxxx| 久久亚洲私人国产精品va媚药| 精品99久久久久久| 久久免费看少妇高潮| 精品福利一二区| 国产三级三级三级精品8ⅰ区| 国产亚洲婷婷免费| 国产亚洲一二三区| 亚洲婷婷在线视频| 亚洲高清免费在线| 美女视频一区在线观看| 国产一区二区不卡| 99国产精品国产精品毛片| 在线精品视频免费观看| 91精品国产综合久久久久久| 精品久久久三级丝袜| 国产婷婷色一区二区三区四区| 久久久精品免费免费| 国产精品网站在线观看| 亚洲精品国产一区二区三区四区在线| 亚洲最新在线观看| 美女视频免费一区| 岛国av在线一区|