PostgreSQL的分區實際上是一堆使用檢查約束來驗證每個分區中只有正確數據的視圖。創建一個父表和其他分區創建從主繼承:
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
);
CREATE TABLE measurement_y2006m02 () INHERITS (measurement);
CREATE TABLE measurement_y2006m03 () INHERITS (measurement);
...
CREATE TABLE measurement_y2007m11 () INHERITS (measurement);
CREATE TABLE measurement_y2007m12 () INHERITS (measurement);
CREATE TABLE measurement_y2008m01 () INHERITS (measurement);
很顯然,我省略了一些代碼,但你可以在PostgreSQL table partitioning檢查出的文檔。分區最重要的部分是確保您構建自動腳本以創建未來的新分區以及合併舊分區。
在操作上,當PostgreSQL運行你的查詢時,它看起來好像是SELECT * FROM measurement WHERE logdate BETWEEN '2006-02-13' AND '2006-02-22';
優化器會出現「AH HA!我知道這裏有什麼,有一個分區,我只要看看錶measurement_y2006m02
並撤回相應的數據。
隨着年齡的增長數據從主分區,你可以只刪除舊錶,否則將它們合併到一個歸檔分區。這些工作大部分都可以通過腳本實現自動化 - 您真正需要做的就是編寫一次腳本並對其進行測試。一個好處是,舊數據往往不會改變 - 許多分區不需要索引維護或抽真空。
請記住,分區主要是數據管理解決方案,可能無法提供您需要的性能優勢。調整查詢,應用索引以及檢查PostgreSQL配置(postgresql.conf,存儲配置和操作系統配置)可能會導致更高的性能提升,從而對數據進行分區。
你能詳細說一下嗎? – EmirZ