PostgreSQL 分區(qū)表怎么解析,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、鹿寨網(wǎng)站維護(hù)、網(wǎng)站推廣。
MySQL 在分區(qū)表上的缺失不同,POSTGRESQL 的分區(qū)表那算是“硬可”。PG11 已經(jīng)推出了HASH 分區(qū)。具體操作是怎樣
首先分區(qū)表的大致用途有那些
1 在符合業(yè)務(wù)的基礎(chǔ)上,能對(duì)合理的預(yù)設(shè)的查詢提高查詢的速度
2 在符合業(yè)務(wù)的基礎(chǔ)上,能對(duì)數(shù)據(jù)的插入降低熱點(diǎn)塊的競(jìng)爭(zhēng),提高插入速度
3 在某些場(chǎng)合合理的訪問分區(qū)可能順序的掃描分區(qū)內(nèi)的數(shù)據(jù)比使用分區(qū)內(nèi)的索引更能提高數(shù)據(jù)訪問的性能。
4 合理的設(shè)置分區(qū),會(huì)更方便處理無用的數(shù)據(jù),統(tǒng)一將一個(gè)分區(qū)內(nèi)的數(shù)據(jù)進(jìn)行處理。
目前 POSTGRESQL 支持的分區(qū)方式有
1 Range Partitiioning
2 List Partitioning
3 Hash Partitioning
與ORACLE 差不多的是,每個(gè)分區(qū)也是可以有自己的子分區(qū)的索引,默認(rèn)值,或者一些其他定義。
另外一件事情是分區(qū)這個(gè)事情是需要有預(yù)先的設(shè)計(jì)的,而不是在系統(tǒng)的數(shù)據(jù)庫表已經(jīng)運(yùn)行了好長(zhǎng)一段時(shí)間后,在去做分區(qū)表。所以在系統(tǒng)設(shè)計(jì)之初就做好設(shè)計(jì)工作是重要的。
下面我們就來做點(diǎn)什么
1 HASH Partitioning 這是在 PG 11 中的新功能 ,通過HASH partitioning 可以加速數(shù)據(jù)的插入,這也是ORACLE DBA 引以為豪的傲嬌點(diǎn)。
下面建立一個(gè)HASH分區(qū)表,這里已BIGINT 為主鍵,插入的主鍵除以10后余數(shù)來選擇記錄的落點(diǎn)。
后面直接插入20萬數(shù)據(jù)不到1 秒就完成了
我們來看看插入的數(shù)據(jù),基本上都打散了。
查詢也是沒有問題,走了主鍵的索引
而清除一個(gè)分區(qū)表的數(shù)據(jù)也很簡(jiǎn)單,直接刪除那個(gè)表就可以了
如果想繼續(xù)恢復(fù)那個(gè)分區(qū)也是很容易的事情
當(dāng)然如果你想保留數(shù)據(jù)分區(qū)表的部分?jǐn)?shù)據(jù),但又不想他成為分區(qū)表中的一員也很簡(jiǎn)單。
同時(shí)PostgreSQL 也同樣支持range 分區(qū)的類型,通過range 類型的分區(qū)可以根據(jù)已經(jīng)設(shè)計(jì)好的日期,或者其他表中的行數(shù)據(jù)進(jìn)行劃分,進(jìn)行分區(qū)表存儲(chǔ)。
廢話不說,建立相關(guān)的表和分區(qū)表
在建立日期類型的分區(qū)表中,要注意到to 是不包含后面指定的時(shí)間段,如果設(shè)置成 from ('2008-01-01') to ('2008-12-31') 下一個(gè)range 設(shè)置成 from ('2019-01-01') to ('2019-12-31') 則在插入數(shù)據(jù)的時(shí)候會(huì)報(bào)
no partition of relation found for row
的問題。
另一個(gè)問題是,建立分區(qū)表的時(shí)候(Postgresql 不建議建立主鍵,這樣會(huì)引起以后必要的麻煩,如果需要可以建立唯一索引)
創(chuàng)建一個(gè)存儲(chǔ)過程來進(jìn)行數(shù)據(jù)的插入,看看分區(qū)表是否有問題
create or replace procedure insert_data()
language plpgsql
as $$
declare
date_value timestamp;
declare id int;
begin
date_value := '2007-01-01 00:00:00'::timestamp + '1 hour';
id = 1;
while id < 400000 loop
insert into range_test (password,insert_date) (select id::char(48),date_value::timestamp);
id = id + 1;
date_value := date_value::timestamp + '1 hour';
end loop;
end;
$$;
通過圖中的兩條語句來進(jìn)行數(shù)據(jù)的驗(yàn)證,沒有問題。
根據(jù)查詢的要求我們還可以建立相關(guān)的分區(qū)索引
當(dāng)然如果全表查詢,也可以走全局的索引
看完上述內(nèi)容,你們掌握PostgreSQL 分區(qū)表怎么解析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
文章名稱:PostgreSQL分區(qū)表怎么解析
標(biāo)題鏈接:http://chinadenli.net/article0/gicsio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、外貿(mào)建站、、微信小程序、App開發(fā)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)