時(shí)間:2024-02-08 11:17作者:下載吧人氣:17
前言
項(xiàng)目中有需求要垂直分表,即按照時(shí)間區(qū)間將數(shù)據(jù)拆分到n個(gè)表中,PostgreSQL提供了分區(qū)表的功能。分區(qū)表實(shí)際上是把邏輯上的一個(gè)大表分割成物理上的幾小塊,提供了很多好處,比如:
1、查詢性能大幅提升
2、刪除歷史數(shù)據(jù)更快
3、可將不常用的歷史數(shù)據(jù)使用表空間技術(shù)轉(zhuǎn)移到低成本的存儲(chǔ)介質(zhì)上
那么什么時(shí)候該使用分區(qū)表呢?官方給出的指導(dǎo)意見(jiàn)是:當(dāng)表的大小超過(guò)了數(shù)據(jù)庫(kù)服務(wù)器的物理內(nèi)存大小則應(yīng)當(dāng)使用分區(qū)表,接下來(lái)結(jié)合一個(gè)例子具體記錄一下創(chuàng)建分區(qū)表的詳細(xì)過(guò)程。
創(chuàng)建分區(qū)表
首先看一下需求,現(xiàn)在有一張日志表,現(xiàn)在需要按表中的操作時(shí)間字段(operation_time)分區(qū),如下圖:
這個(gè)需求就是一個(gè)典型的按時(shí)間創(chuàng)建分區(qū)表,首先看一下步驟:
1.創(chuàng)建父表
2.創(chuàng)建n個(gè)子表,每個(gè)子表都是繼承于父表
3.定義一個(gè)規(guī)則(Rule)或觸發(fā)器(Trigger),把對(duì)主表的數(shù)據(jù)插入重定向到合適的分區(qū)表
如上所示,整體的大步驟就分為以上三個(gè),當(dāng)然還可以有一些小的優(yōu)化措施,比如對(duì)于每個(gè)分區(qū),在關(guān)鍵字字段上創(chuàng)建一個(gè)索引等等。首先來(lái)看第一步——?jiǎng)?chuàng)建父表。
在創(chuàng)建分區(qū)表之前應(yīng)當(dāng)先創(chuàng)建一張“父表”,所有分區(qū)表都從它繼承,這個(gè)表中沒(méi)有數(shù)據(jù),也不要在這個(gè)表上定義任何檢查約束及索引,現(xiàn)在我們就先創(chuàng)建這樣一張表,但之前先建一個(gè)序列:
CREATE SEQUENCE “public”.”t_sys_log_main_id_seq”
INCREMENT 1
MINVALUE 1
MAXVALUE 99999999
START 1
CACHE 1;
ALTER TABLE “public”.”t_sys_log_main_id_seq” OWNER TO “postgres”;
網(wǎng)友評(píng)論