postgresql使用規範解讀

表設計規範
1、建議能使用小字節數類型,就不要用大字節數類型
2、建議能用varchar(N)text就不用char(N)
3、建議使用default NULL,而不用default ''
4、建議使用NUMERIC(precisionscale)來存儲貨幣金額和其它要求精確計算的數值,而不使用
realdouble precision
5、如果有國際貨業務的話,建議使用timestamp with time zone(timestamptz),而不用
timestamp without time zone,避免時間函數在對於不同時區的時間點返回值不同
建議建表時COLUMN加上COMMENT,便於後續瞭解業務及維護:
6、頻繁更新的表建議設定適當的fillfactor,如85%,預留15%空間供hot更新使用
7、避免使用觸發器,會使數據處理邏輯複雜,不便於調試
8、表設計建議加上增量設計,以方便數據獲取、統計等
9、頻繁訪問的大表進行分區設置,一般超過千萬級的寬表,或大於8GB的表可以考慮分區
10、建議設置命名規範,方便區分各個對象,建議小寫字母、數字、下劃線,統一簡拼或是英
文,不建議拼音、英文混用
表名 t_
索引名 i_
視圖 v_
函數 fun_
臨時表或備份表加上關鍵字tmpbak


索引設計規範
1、在選擇性好的字段上創建索引
2、如使用邏輯外鍵,建議在邏輯外鍵上創建索引
3、優先考慮where條件中及order by字段添加索引
4、對於where條件中多個字段and條件的高頻sql,可以參考數據分佈情況創建多字段組合索引
5、對於固定條件且數據佔比低的高頻sql,可以創建partial index
6、對於經常使用表達式作爲查詢條件的sql,可以使用表達式索引,正常索引不會起作用


研發規範
1、避免使用select *,枚舉所需要的字段
2、統計數量統一使用count(*),不使用count(常量),count(列名)
3、判空使用is nullis not null,不用=!=判空
4、避免join過多表,union過多表
5、實現分頁查詢邏輯時,如果count0,則直接返回,避免執行後續的分頁語句
6、遊標使用後要關閉、釋放
7、應用程序開啓autocommit,避免程序自動begin事務後不做任何操作
8、高併發應用場景使用數據庫連接池
9、應用正確處理數據類型,避免在數據庫中進行隱式轉換
10、避免向客戶端返回大量數據
11、避免單個事務過大、過長、過於複雜,將單個事務中多條sql操作分解、拆分,或者放到不同
的事務裏,每個事務粒度儘可能小,這樣可以儘量減少資源lock,檢查鎖阻塞、死鎖的產生
12、大批量的數據入庫時,使用copy替代insert,可以提高寫入速度
13、避免頻繁count大表,實時性要求不高的場景,可以定期count,並將count結果緩存使用
14、建議對報表類的或生成基礎數據的查詢,使用物化視圖(MATERIALIZED VIEW)定期固化數據
快照,避免對多表(尤其多寫頻繁的表)重複跑相同的查詢。PostgreSQL中物化視圖支持併發更
新:REFRESH MATERIALIZED VIEW CONCURRENTLY。原理和優缺點與index CONCURRENTLY
類似,即以時間來換取鎖,併發刷新的速度會比非CONCURRENTLY慢,但後者會阻塞其他從該物
化視圖讀數據的請求。


運維規範
1ddl操作設置鎖等待,防止雪崩
2、刪除全表使用truncate,不使用delete
3、修改數據時先select確認範圍,使用事務控制提交或回滾
4、在線創建索引使用CONCURRENTLY關鍵字,避免阻塞dml
5、數據庫設置複雜密碼,應用不使用超級用戶,控制賬號明確權限,不同應用共用數據庫時分配
多個賬號
6、發生主備切換後,新的主庫在開放給應用程序使用前,建議使用pg_prewarm預熱之前的主庫
shared buffer裏的熱數據



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章