2011-09-05 14 views
5

Przechowuję wysłane wiadomości e-mail w RDBMS, w tym adres, adres i treść wiadomości e-mail.PostgreSQL Big Text Column Performance

Ciało może być dowolną dowolną ilością tekstu, a ja nigdy nie będę jej szukał.

Czy są jakieś problemy z wydajnością, o które powinienem się martwić, mając potencjalnie dużą kolumnę, która nie jest używana zbyt często w jednym z najczęściej używanych tabel (wiadomości e-mail)?

(Ten projekt jest napisany w Rails)

Odpowiedz

6

Nie, nie musisz się o to martwić.

Technicznie nie ma różnicy w przechowywaniu między np. varchar(5) i kolumna text.

Cytat z manual

nie ma różnicy wydajności między tymi trzema typami, oprócz zwiększonej przestrzeni dyskowej przy użyciu pustej wyściełane typ

Trzy rodzaje wymienione są char, varchar i text. Gdzie char jest "typem z pustą wyściółką".

+0

To nie jest prawda; 'varchar (5)' jest ograniczony do 9 bajtów pamięci, ale 'tekst' (lub zwykły' varchar', bez rozmiaru) może przekroczyć rozmiar strony, co powoduje, że rzeczywiste dane są poza stroną. – SingleNegationElimination

+0

@TokenMacGuy: nie, nie ma różnicy w przechowywaniu między tymi dwoma. Jedynym wyjątkiem jest to, że varchar (5) nigdy nie będzie "wzniesiony", ponieważ nie przekracza progu kompresji wartości. 5 znaków przechowywanych w kolumnie varchar (5) nie różni się od 5 znaków zapisanych w kolumnie tekstowej. –

+0

oh ... zgadzamy się! – SingleNegationElimination

6

Postgresql przechowuje duże obiekty w obszarze dodatkowym. Możesz przeczytać o tym tutaj: TOAST. Głównym problemem będzie utrzymanie dużego obiektu poza wybraną listą zapytań, które zwracają wiele wierszy, aby uniknąć odwiedzania dodatkowego obszaru pamięci.

Jeśli zdecydujesz się dodać funkcję wyszukiwania do tekstu głównego, będziesz musiał użyć strategii pełnego tekstu, która jest dobrze obsługiwana w PostgreSQL, ale jest nieco mniej intuicyjna. Temat otrzymuje full chapter leczenia w podręczniku.

+0

Ten link nie wspomina o tym, ale w przypadku wyszukiwania pełnotekstowego należy ustawić indeks GIN w kolumnie tekstowej. Dzięki temu wyszukiwanie pełnotekstowe jest niesamowicie szybkie. Nie wiem, dlaczego więcej osób nie wspomina o tej funkcji PostgreSQL. – Cerin