PostgreSQL父子表和分割槽表對比

2021-09-20 11:56:10 字數 3174 閱讀 4950

從整體上來看,子表和分割槽表有相同的地方也有差別,因為都使用了繼承的特性,所以本質上是一樣的。下面看一下二者的區別:

1.父子表:

--建立父表

create table

cities (

name

text,

population

float,

altitude

int);

--建立子表

create table

capitals (

state

char(2)

) inherits (cities);

insert into

cities

values('las vegas', 1.53, 2174); --插入父表

insert into

cities

values('mariposa',3.30,1953); --插入父表

insert into

capitals

values('madison',4.34,845,'wi');--插入子表

--在父表上做查詢,父表和子表的資料均被取出。

select

name, altitude

from

cities

where

altitude > 500;

las vegas 2174

mariposa 1953

madison 845

--檢視執行計畫,實際上查詢從掃瞄了兩個表的資料,組合出想要的結果

explain analyze select

name,altitude

from

cities

where

rows=361 width=36) (actual time=0.008..0.012

rows=3 loops=1)

-> seq scan on cities (cost=0.00..2.41

rows=38 width=36) (actual time=0.007..0.008

rows=2 loops=1)

filter: (altitude > 500)

-> seq scan on capitals (cost=0.00..22.12

rows=323 width=36) (actual time=0.001..0.001

rows=1 loops=1)

filter: (altitude > 500)

planning time: 0.096

m***ecution time: 0.044

ms--在子表上做查詢,只能查出子表上的資料。

select

name, altitude

from

capitals

where

altitude > 500;

--如果只想從父表中取資料,則需要在sql中加入only關鍵字,如:

select

name,altitude

from only

cities

where

altitude > 500;

從這個例子看一看出,父子表使用了繼承的特性,子表可以增加字斷,另外子表可以繼承於多個父表。但是仍然有個疑問,有什麼卵用呢??

2.分割槽表:

分割槽表也是使用繼承的特性,在邏輯上把乙個大表分成幾塊資料,分割槽的字斷和主表字斷一致,不會再另行增加字斷,另外可以人為定義約束,來約束每個表上的資料不重複。

--建立主表示例:

create table

measurement (

city_id

int not null,

logdate

date

not null,

peaktemp

int);

--建立幾個子表,繼承父表所有字斷:

create table

measurement_yy04mm02 (

check ( logdate >= date

'2004-02-01'

and

logdate

< date

'2004-03-01')

) inherits (measurement);

create table

measurement_yy04mm03 (

check (logdate >= date

'2004-03-01'

and

logdate

< date

'2004-04-01')

) inherits (measurement);

...create table

measurement_yy05mm11 (

check (logdate >= date

'2005-11-01'

and

logdate

< date

'2005-12-01')

) inherits (measurement);

create table

measurement_yy05mm12 (

check (logdate >= date

'2005-12-01'

and

logdate

< date

'2006-01-01')

) inherits (measurement);

create table

measurement_yy06mm01 (

check (logdate >= date

'2006-01-01'

and

logdate

< date

'2006-02-01')

) inherits (measurement);

從這個例子看出,分割槽表完全繼承主表字斷,並且不另外增加字斷,每個分割槽表上定義好約束,保證資料不要發生重疊。分割槽表在生產上還是很有用的,可以提高查詢效率。

mysql設計 父子表 資料庫分庫分表之父子表

當單體架構無法滿足業務需求的時候,必定要往分布式微服務架構完成轉型,但是現在技術和框架五花八門,技術變更迅速,胡亂跟風,當完成架構變更時又有了新的架構了。但是無論架構如何改變目標是一致的資料庫分庫分表是必然之路,加入在單體架構的時候我們就安裝微服務的方式完層分庫分表,在對應業務激增的時候,只需要進行...

父子表建立以及相關操作

1.建立student表 表名 t student rowid st rowid 屬性 stcode,stname,st dr,stdob st dr為性別指向,指向乙個ct 性別表 class user.student extends persistent sqlrowidname st rowi...

PostgreSQL 動態分表 Rotate輪詢

工作中,遇到如下業務需求 使用者可以自定義歷史資料的儲存期限,且對過期資料不作保留 即定期刪除 該類資料表的數量級在6千萬 年。前期處理方案 按月分表,由於在專案前期,限制使用者只能儲存一年的資料量,通過pg的rule分表,並通過一張中間表,進行新月份資料的錄入更替。簡單rotate用法,在月份更替...