日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

postgresql中表的继承及分区表(四)

發布時間:2025/3/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 postgresql中表的继承及分区表(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

分區查詢優化-Constraint Exclusion

Oracle中這種技術叫分區裁剪(Partition Pruning),通過排除不需要的分區,只掃描特定分區來極大地優化sql查詢

PG中的分區因為通過check約束來實現,因此查詢條件中如果滿足某些子分區的約束,就可以通過排除不必要的分區來提高查詢效率

這里我們通過執行計劃來看一下pg的這個特性.

db01=> show constraint_exclusion;constraint_exclusion ----------------------partition (1 row)db01=> explain select * from t_partition where log_date = date'2015-3-13';QUERY PLAN ----------------------------------------------------------------------------------------------Append (cost=0.00..13.67 rows=7 width=40)-> Seq Scan on t_partition (cost=0.00..0.00 rows=1 width=40)Filter: (log_date = '2015-03-13'::date)-> Bitmap Heap Scan on t_partition_s200503 (cost=4.20..13.67 rows=6 width=40)Recheck Cond: (log_date = '2015-03-13'::date)-> Bitmap Index Scan on idx_t_partition_s200503_1 (cost=0.00..4.20 rows=6 width=0)Index Cond: (log_date = '2015-03-13'::date) (7 rows)

constraint_exclusion參數控制查詢優化器是否使用這種技術.
這里可以看到只查詢了t_partition_s200503這個分區

不使用此優化手段后的計劃:

db01=> set constraint_exclusion=off; SET db01=> explain select * from t_partition where log_date = date'2015-3-13';QUERY PLAN ----------------------------------------------------------------------------------------------Append (cost=0.00..65.50 rows=25 width=40)-> Seq Scan on t_partition (cost=0.00..0.00 rows=1 width=40)Filter: (log_date = '2015-03-13'::date)-> Bitmap Heap Scan on t_partition_s200502 (cost=4.20..13.67 rows=6 width=40)Recheck Cond: (log_date = '2015-03-13'::date)-> Bitmap Index Scan on idx_t_partition_s200502_1 (cost=0.00..4.20 rows=6 width=0)Index Cond: (log_date = '2015-03-13'::date)-> Bitmap Heap Scan on t_partition_s200503 (cost=4.20..13.67 rows=6 width=40)Recheck Cond: (log_date = '2015-03-13'::date)-> Bitmap Index Scan on idx_t_partition_s200503_1 (cost=0.00..4.20 rows=6 width=0)Index Cond: (log_date = '2015-03-13'::date)-> Bitmap Heap Scan on t_partition_s200504 (cost=4.20..13.67 rows=6 width=40)Recheck Cond: (log_date = '2015-03-13'::date)-> Bitmap Index Scan on idx_t_partition_s200504_1 (cost=0.00..4.20 rows=6 width=0)Index Cond: (log_date = '2015-03-13'::date)-> Seq Scan on t_partition_s200505 (cost=0.00..24.50 rows=6 width=40)Filter: (log_date = '2015-03-13'::date) (17 rows)

可以看到優化器選擇的方案是每個子分區全部掃描一遍,顯而易見性能差距有多大.

PG支持的分區類型

暫時只支持range partition 和 list partition
list 跟 range類似, 比如分公司表按各分公司代碼分區的check 寫法為 (check branch = '1010100' )

分區總結

總得來說pg的分區功能支持類型較少,與oracle相比較實現比較復雜.

這里還需要注意:
1. 各子分區見的check約束不要發生數據重疊情況.
2. 直接更新分區關鍵字,迫使該記錄映射到其他分區會失敗,需要通過變通方法實現.

db01=> select * from t_partition;id | msg | log_date ----+------+------------2 | msg2 | 2015-02-133 | msg3 | 2015-03-024 | msg4 | 2015-04-12 (3 rows)db01=> update t_partition set log_date = date'2015-3-20' where id = 4; ERROR: new row for relation "t_partition_s200504" violates check constraint "t_partition_s200504_log_date_check" DETAIL: Failing row contains (4, msg4, 2015-03-20). db01=> with t as ( db01(> delete from t_partition where id =4 returning * ) db01-> insert into t_partition select t.id,t.msg,date'2015-03-20' from t; INSERT 0 0

或者可以通過觸發器來實現

3. 約束排除(Constraint Exclusion)對于諸如now()等不確定的值不能使用此技術來優化.

db01=> show constraint_exclusion;constraint_exclusion ----------------------partition (1 row)db01=> explain select * from t_partition where log_date = now();QUERY PLAN ----------------------------------------------------------------------------------------------Append (cost=0.00..68.45 rows=25 width=40)-> Seq Scan on t_partition (cost=0.00..0.00 rows=1 width=40)Filter: (log_date = now())-> Bitmap Heap Scan on t_partition_s200502 (cost=4.20..13.68 rows=6 width=40)Recheck Cond: (log_date = now())-> Bitmap Index Scan on idx_t_partition_s200502_1 (cost=0.00..4.20 rows=6 width=0)Index Cond: (log_date = now())-> Bitmap Heap Scan on t_partition_s200503 (cost=4.20..13.68 rows=6 width=40)Recheck Cond: (log_date = now())-> Bitmap Index Scan on idx_t_partition_s200503_1 (cost=0.00..4.20 rows=6 width=0)Index Cond: (log_date = now())-> Bitmap Heap Scan on t_partition_s200504 (cost=4.20..13.68 rows=6 width=40)Recheck Cond: (log_date = now())-> Bitmap Index Scan on idx_t_partition_s200504_1 (cost=0.00..4.20 rows=6 width=0)Index Cond: (log_date = now())-> Seq Scan on t_partition_s200505 (cost=0.00..27.40 rows=6 width=40)Filter: (log_date = now()) (17 rows)

4. 由于計劃器進行constraint_exclusion時,對每個子分區的約束檢查,因此子分區太多會影響解析的性能,官方所說的百八十個性能還可以我沒有機會測試.不要超過千八百個..

//END

轉載于:https://my.oschina.net/hippora/blog/379754

總結

以上是生活随笔為你收集整理的postgresql中表的继承及分区表(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品腿扒开做爽爽爽挤奶网站 | 亚洲看看 | 九热在线视频 | 一区二区三区手机在线观看 | 免费观看一区二区三区毛片 | 国产自产一区二区 | 欧美z○zo重口另类黄 | 久久婷婷久久 | 亚洲专区在线视频 | 捆绑调教在线观看 | 久久99深爱久久99精品 | 一本色道综合久久欧美日韩精品 | 日本黄色片免费看 | 午夜视频免费在线 | 久久麻豆视频 | 熟女少妇内射日韩亚洲 | 国产精品天美传媒 | 熟妇高潮一区二区三区 | 国产人人射 | 韩日一区二区三区 | 国产欧美一区二 | 国产午夜一区二区 | 日本va欧美va欧美va精品 | 91久久国产| 秋霞国产一区 | 在线一区二区三区 | 日韩成人午夜 | 波多野结衣在线一区二区 | 另类综合网 | 日韩成人无码影院 | 姑娘第5集在线观看免费 | 亚洲另类天堂 | 日本熟妇浓毛 | 女女同性女同一区二区三区按摩 | 狠狠艹视频 | 中国一级特黄真人毛片免费观看 | 亚洲一区二区三区电影 | 国产乱free国语对白 | 国产精品久久久久久久久久免费看 | 四虎1515hh.com | 高清av不卡 | 日韩一级在线观看视频 | 乱视频在线观看 | 国产一二三视频 | 亚洲日本香蕉视频 | 国产精品视频第一页 | 成全世界免费高清观看 | 九九在线视频 | 欧美精品 在线观看 | 捆绑中国女人hd视频 | 亚洲av色区一区二区三区 | 杨幂一区二区三区免费看视频 | 性生活视频在线播放 | 国产成人av一区二区三区 | 国产一区免费看 | 精品在线视频一区 | 中文人妻熟女乱又乱精品 | 日韩免费大片 | 秋霞啪啪片 | 日韩欧美中文字幕精品 | 国产精品视频入口 | 欧美精品欧美精品系列 | 激情影院内射美女 | 理论av| 天堂久久精品 | 久操福利 | 人人爽人人爽人人片 | 四虎色 | 天堂网亚洲 | 久久久久香蕉 | 在线观看一级片 | 齐天大性床战铁扇公主 | 91爱啪 | 国产精品无码av在线有声小说 | 亚洲国产成人精品视频 | 精彩视频一区二区 | 福利姬在线观看 | 亚洲精品电影在线观看 | 91久久在线观看 | 国产91精品久久久久久久 | 国产黄色网络 | 天天尻逼 | 手机看片一区 | 精品国产理论 | 欧美com| 91麻豆国产在线观看 | 亚洲一区二区三区高清在线 | 最好看的mv中文字幕国语电影 | 91国产在线播放 | 美女啪啪网站 | 香蕉视频在线免费播放 | 国产精品网站视频 | 理论黄色片 | 高清国产一区 | 久久国产亚洲精品无码 | 成人欧美一区二区三区在线观看 | 国产美女操 | 成人精品三级 | 免费看一级片 |