我正在將發送的電子郵件存儲在RDBMS中,包括地址,地址和電子郵件正文。PostgreSQL大文本列性能
身體真的可以是任意數量的文本,我永遠不會在意搜索它。
當我的某個最常訪問的表(電子郵件)中有一個不常用的潛在大型列時,是否應該擔心有什麼性能問題?
(該項目是寫在Rails)的
我正在將發送的電子郵件存儲在RDBMS中,包括地址,地址和電子郵件正文。PostgreSQL大文本列性能
身體真的可以是任意數量的文本,我永遠不會在意搜索它。
當我的某個最常訪問的表(電子郵件)中有一個不常用的潛在大型列時,是否應該擔心有什麼性能問題?
(該項目是寫在Rails)的
不,你不必擔心。
從技術上來說, varchar(5)
和text
列。從manual
報價有這三種類型之間沒有性能差異,除了增加的存儲空間使用空白填充型
這三種類型所提到有char
時, varchar
和text
。其中char
是「空白填充類型」。
postgresql將大對象存儲在輔助區域中。你可以在這裏閱讀:TOAST。主要關心的是將大對象保留在返回許多行的查詢的選擇列表之外,以避免訪問輔助存儲區域。
如果當您決定向正文添加搜索功能時,您需要使用全文策略,Postgres很好地支持這種策略,但有點不直觀。該主題在手冊中收到full chapter治療。
該鏈接沒有提及它,但是關於全文搜索,您需要在文本列上設置GIN索引。因此,全文搜索非常快速。我不知道爲什麼更多的人不提這個PostgreSQL功能。 – Cerin
這不是真的; 'varchar(5)'被限制爲9個字節的存儲空間,但是一個'text'(或簡單的'varchar',沒有大小)可以超過頁面大小,從而將實際數據放在頁面之外。 – SingleNegationElimination
@TokenMacGuy:不,這兩者在存儲方面沒有區別。唯一的例外是varchar(5)不會被「烘烤」,因爲它不會超過壓縮值的閾值。存儲在varchar(5)列中的5個字符與存儲在文本列中的5個字符沒有區別。 –
哦......我們同意! – SingleNegationElimination