# PostgreSQL 9 從零開始學

PostgreSQL 9 從零開始學封面

  • 作者:劉增杰、張少軍
  • 出版社:清華大學出版社
  • ISBN:9787302316732

# 第二章

# UNLOGGED

不寫 write-ahead log 所以速度很快,但是有以下的特性:

  • 如果 DB crash or unclean shutdown 裡面的資料會被刪除。
  • 資料不會複製到 standby DB。

建立方式在 CREATE TABLE 語法加上 UNLOGGED 參數。

# 參考資料

# 第五章

# CHAR 與 VARCHAR 之間的特型與選擇

CHAR 是固定長度,VARCHAR 是可固定 or 不固定長度,另外還有 TEXT 是不固定長度。

CHAR 會將不足的部分補空白,VARCHAR 不會。

VARCHAR 可以設定 length 限制長度,TEXT 不能。

效能上因為 CHAR 要填充空白,所以會比較慢。

PostgreSQL 官方文件說明,大部分的狀況下使用 VARCHAR 或 TEXT 就可以了。

# 參考資料

# 第九章

# 索引 Index

Hash type index 在書上是寫說效能比 B-tree 慢,而且也沒有寫入到 WAL log 裡面,建議是不要用 Hash type index。

不過在 PostgreSQL 10 之後 Hash type index 已經改良為 crash-safe 效能也增加不少,如果有需要可以考慮使用。

# 第十五章

# 最佳化資料庫

# 拆表

這裡有提到如果一個 table 內的 columns 太多可能會影響效能,可以把不常用的 cloumns 拆到另外一個表去。

# 刪除索引

一個 table 上 index 數量會影響 insert 的速度,可以透過 Index Maintenance - PostgreSQL wiki (opens new window) 官方 wiki 裡面 Index size/usage statistics 這條 SQL 找出沒用到的 index ,用 Duplicate indexes 這條 SQL 找出重複的 index 。

# Batch insert

要插入多筆資料可以使用 batch insert

INSERT INTO fruits VALUES('x1', '101', 'mongo2', '5.5');
INSERT INTO fruits VALUES('x2', '101', 'mongo3', '5.5');
INSERT INTO fruits VALUES('x3', '101', 'mongo4', '5.5');

下面這條比較有效率

INSERT INTO fruits VALUES
('x1', '101', 'mongo2', '5.5'), 
('x2', '101', 'mongo3', '5.5'),
('x3', '101', 'mongo4', '5.5');

對應 knex 則是要傳一個 array 進入,這樣就會輸出 batch insert 的語法。

knex('fruits').insert(array)

# 使用 copy

如果要 insert 超多資料,像是匯入 cvs 之類的可以用 COPY 語法,使用說明可以看官方文件 (opens new window)

Node.js 可以用 pg-copy-streams (opens new window) 這個套件來做 COPY 。

# 最佳化資料庫 server 參數

PostgreSQL 可以調整 postgresql.coonf 內的參數來最佳化性能,不過這些參數是有互相關聯的,亂調可是會翻車的,這邊建議使用 PGTune (opens new window) 這個線上小工具來產生設定參數。

Last Updated: 2022-2-3 16:43:56
贊助商連結
    贊助商連結
    (adsbygoogle = window.adsbygoogle || []).push({});