2011-09-05 4 views
5

私は送信した電子メールを宛先、送信元アドレス、電子メール本文を含むRDBMSに保存しています。PostgreSQLのビッグテキストカラムのパフォーマンス

ボディは実際には任意の量のテキストになり得ますが、私はそれを検索する気にはなりません。

最も頻繁にアクセスされるテーブル(電子メール)のうちで頻繁に使用されない可能性のある大きな列を持つ場合、パフォーマンスに関する問題はありますか?

(このプロジェクトはRailsの中に書かれている)

答えて

6

いいえ、あなたはそのことについて心配する必要はありません。

技術的には、例えば、 varchar(5)およびtextカラム。空白埋めタイプ

3種類 charがあり挙げ

を使用する場合manual

から

引用は、増加した収納スペースとは別に、これら三種類の間には性能差がありませんvarcharおよびtext。ここで、charは「空白埋めタイプ」です。

+0

これは実際には当てはまりません。 'varchar(5)'は9バイトの記憶領域に制限されていますが、 'text'(あるいはサイズのない' varchar')はページサイズを超えることができます。 – SingleNegationElimination

+0

@TokenMacGuy:いいえ、これらの2つの間に保存に違いはありません。唯一の例外は、値を圧縮するためのしきい値を超えないため、varchar(5)が決してトーストされないことです。 varchar(5)列に格納されている5文字は、テキスト列に格納されている5文字と同じです。 –

+0

ああ...私たちは同意する! – SingleNegationElimination

6

postgresqlは大きなオブジェクトをセカンダリ領域に格納します。あなたはそれについてここで読むことができます:TOAST。主な関心事は、多数の行を戻す照会の選択リストから大きなオブジェクトを除外して、2次記憶域にアクセスするのを避けることです。

本文のテキストに検索機能を追加する場合は、完全なテキスト戦略を使用する必要があります。これはPostgresでうまくサポートされていますが、直感的ではありません。このトピックでは、マニュアルで治療のfull chapterを受け取ります。

+0

そのリンクには言及していませんが、フルテキスト検索については、テキスト列にGINインデックスを設定する必要があります。それで、フルテキスト検索は非常に高速です。なぜ私はこのPostgreSQLの機能に言及していないのですか? – Cerin

関連する問題