從整體上來看,子表和分割槽表有相同的地方也有差別,因為都使用了繼承的特性,所以本質上是一樣的。下面看一下二者的區別: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用法,在月份更替...