PostgreSQL V10 分割槽表特性

2021-09-12 19:42:26 字數 2978 閱讀 5505

目錄

環境文件用途

詳細資訊

環境系統平台:n/a

版本:10.3

文件用途

postgresql v10 分割槽表的理解與使用

詳細資訊

分割槽表特性是pg10新加的乙個很重要的特性。

之前的版本也能實現分割槽表功能,是根據「繼承表+約束+規則或觸發器」實現。

相對於之前的分割槽實現方式,pg10的分割槽特性有以下優勢:

1)管理分割槽方便

2)資料插入效率高

事實上,pg10的分割槽特性也是在內建繼承表的基礎上實現的,所以建立的分割槽實質上也是普通的表結構。

目前pg10支援範圍分割槽和列表分割槽,雜湊分割槽還不支援。

範圍分割槽:

pg10的分割槽表在建表語法上,主表和分割槽是單獨建立的。下面的列表分割槽也是一樣。

建立主表語法:

create table 表名 ( [ [, ... ] ] )

partition by range ( [ [, ...] ] );

範圍分割槽的key值可由多個字段組成(最多32個字段)。

建立分割槽語法:

create table 表名 partition of 主表 for values

from [, ...]

to [, ...] [ tablespace 表空間名 ];

引數說明:

// from ... to 表示分割槽的起始值和結束值。

// minvalue / maxvalue 表示無限小值和無限大值。

// 預設from後面的值是包括值分割槽的約束內,to後面的值不包括。

示例:postgres=# create table test(n int) partition by range(n);

create table

postgres=# create table test_1 partition of test for values from (minvalue) to (10);

create table

postgres=# create table test_2 partition of test for values from (10) to (100);

create table

postgres=# create table test_3 partition of test for values from (100) to (1000);

create table

postgres=# create table test_4 partition of test for values from (1000) to (10000);

create table

postgres=# \d+ test

table "public.test"

column |  type   | collation | nullable | default | storage | stats target | descrip

tion

n      | integer |           |          |         | plain   |              |

partition key: range (n)

partitions: test_1 for values from (minvalue) to (10),

test_2 for values from (10) to (100),

test_3 for values from (100) to (1000),

test_4 for values from (1000) to (10000)

postgres=# \d+ test_2

table "public.test_2"

column |  type   | collation | nullable | default | storage | stats target | descrip

tion

n      | integer |           |          |         | plain   |              |

partition of: test for values from (10) to (100)

partition constraint: ((n is not null) and (n >= 10) and (n < 100))

postgres=# insert into test select generate_series(0, 9999);insert 0 10000

postgres=#  explain analyze select * from test;

query plan                         

loops=1)

->  seq scan on test_1  (cost=0.00..35.50 rows=2550 width=4) (actual time=0.009..0

.014 rows=10 loops=1)

->  seq scan on test_2  (cost=0.00..35.50 rows=2550 width=4) (actual time=0.012..0

.044 rows=90 loops=1)

->  seq scan on test_3  (cost=0.00..35.50 rows=2550 width=4) (actual time=0.025..0

.441 rows=900 loops=1)

->  seq scan on test_4  (cost=0.00..142.00 rows=10200 width=4) (actual time=0.026.

.4.317 rows=9000 loops=1)

planning time: 0.248 ms

execution time: 14.503 ms

(7 rows)

更多詳細的資訊請登入【瀚高技術支援平台】檢視

mysql 5 6 分割槽 四 分割槽和鎖定

在mysql 5.6.5及更早版本中,對於 myisam執行dml或ddl語句時,實際執行表級鎖的 儲存引擎 影響分割槽表的這種語句對整個 施加了鎖定 也就是說,所有分割槽都被鎖定,直到語句完成。mysql 5.6.6實現 分割槽鎖定修剪 這在許多情況下消除了不必要的鎖定。在mysql 5.6.6及...

linux 學習7 0(分割槽)

mbr傳統 最多支援2t磁碟,因為磁碟定址空間只有32k 主分割槽 最多建立4個主分割槽 擴充套件分割槽 乙個擴充套件分割槽會占用乙個主分割槽位置,不能直接用 邏輯分割槽 linux最多支援63個ide分割槽和15個scsi分割槽 gpt,現代分割槽機制,定址空間64位 支援超過2t的磁碟 相容mb...

如何mount ext4 分割槽

mount t ext4 target path your.img mount dir 上面mount的時候有可能失敗 第一中,沒有許可權 sudo mount t ext4 target path your.img mount dir 第二中,由於你的your.img不是乙個真正的分割槽後者裝置 ...