2011-09-05 40 views
5

我正在將發送的電子郵件存儲在RDBMS中,包括地址,地址和電子郵件正文。PostgreSQL大文本列性能

身體真的可以是任意數量的文本,我永遠不會在意搜索它。

當我的某個最常訪問的表(電子郵件)中有一個不常用的潛在大型列時,是否應該擔心有什麼性能問題?

(該項目是寫在Rails)的

回答

6

不,你不必擔心。

從技術上來說, varchar(5)text列。從manual

報價有這三種類型之間沒有性能差異,除了增加的存儲空間使用空白填充型

這三種類型所提到有char時, varchartext。其中char是「空白填充類型」。

+0

這不是真的; 'varchar(5)'被限制爲9個字節的存儲空間,但是一個'text'(或簡單的'varchar',沒有大小)可以超過頁面大小,從而將實際數據放在頁面之外。 – SingleNegationElimination

+0

@TokenMacGuy:不,這兩者在存儲方面沒有區別。唯一的例外是varchar(5)不會被「烘烤」,因爲它不會超過壓縮值的閾值。存儲在varchar(5)列中的5個字符與存儲在文本列中的5個字符沒有區別。 –

+0

哦......我們同意! – SingleNegationElimination

6

postgresql將大對象存儲在輔助區域中。你可以在這裏閱讀:TOAST。主要關心的是將大對象保留在返回許多行的查詢的選擇列表之外,以避免訪問輔助存儲區域。

如果當您決定向正文添加搜索功能時,您需要使用全文策略,Postgres很好地支持這種策略,但有點不直觀。該主題在手冊中收到full chapter治療。

+0

該鏈接沒有提及它,但是關於全文搜索,您需要在文本列上設置GIN索引。因此,全文搜索非常快速。我不知道爲什麼更多的人不提這個PostgreSQL功能。 – Cerin