Czy jest jakiś sens w niewymiarowaniu kolumn VARCHAR?

18

Googlowanie wokół wydaje się być mieszane raporty, czy rozmiar VARCHAR2kolumny w Oracle wpływa na wydajność, czy nie.

Chciałbym VARCHARnieco zmienić kwestię wielkości i mam nadzieję, że uzyskam wgląd w to:

Biorąc pod uwagę (wielowierszowe) pola tekstowe ( nie krótkie, takie jak nazwy), które chcesz przechowywać w bazie danych (Oracle), czy jest jakiś sens (wrt. Wydajność lub inny) w nie maksymalizowaniu VARCHARpojemności ( VARCHAR2(4000)w Oracle), ale wybór mniejsza wartość, taka jak 1024 lub 512, ponieważ prawdopodobnie i tak będzie wystarczająca w 98% przypadków.

Jaskółka oknówka
źródło
Podobne pytanie zadaj Tomowi
Vadzim

Odpowiedzi:

12

Wpływa to na zużycie pamięci, zwłaszcza gdy program kliencki musi przydzielić wystarczającą ilość pamięci, aby otrzymać zestaw danych.

Pamiętaj, że wiele aplikacji (zwłaszcza aplikacji internetowych) korzysta z UTF-8, który jest zestawem znaków wielobajtowych. W związku z tym powinieneś brać pod uwagę znaki, a nie bajty.

Gdybym spodziewał się ponad tysiąca znaków, to bym aktywnie rozważył CLOB. Zastanawiałbym się, czy będzie przechowywać zwykły tekst, czy jakąś formę znaczników (wiki / html?), Użycie w językach innych niż euro. Na przykład tutaj pytania i odpowiedzi byłyby CLOB, ale komentarze mogą zmieścić się w VARCHAR.

Jeśli zmaksymalizujesz VARCHAR, to za sześć miesięcy ktoś będzie chciał go powiększyć, a ty skopałbyś się za nieużywanie CLOBA.

Gary
źródło
2
UTF-8 zwykle używa jednego bajtu na jeden znak dla języków zachodnich. Jest wielobajtowy w tym sensie, że pozwala na wielobajtowe sekwencje „ucieczki” do reprezentowania znaków niezachodnich.
Eric J.,
9

Zasadniczo nie ma żadnych rozważań dotyczących wydajności, chociaż mogą wystąpić problemy uboczne . Limit dla varcharnależy traktować jak ograniczenie jak każdy inny - ma on na celu egzekwowanie reguły biznesowej.

IMO powinno zadać pytanie: „Czy chcę, aby dane tekstowe przechowywane w tym polu nie były dłuższe niż n bajtów / znaków” - to jedyny decydujący czynnik przy wyborze pomiędzy varchar(512)i varchar(4000).

Zauważ, że zakładam, że mówisz o varchartypie SQL - sytuacja jest inna, pl/sqla wybór długości może być kluczowy ze względu na przydział pamięci.

Jack Douglas
źródło
Dzięki. Jeśli chodzi o moje (bardzo ograniczone) doświadczenie, każda „reguła biznesowa” określająca limit między „500 - 3999” jest po prostu arbitralna, to znaczy, że ktoś po prostu lubił ten numer. IMHO, jeśli wybieram dowolny tekst i nie ma żadnych konsekwencji implementacyjnych (kontekst tego pytania), to albo jest on maksymalny (4000), albo nie jest to dowolny tekst. --- Punkt, który staram się podnieść w tym komentarzu: Myślę, że nigdy nie będzie reguły biznesowej pomagającej wybrać btw. 512 i 4000 (chyba że: „jak najwięcej znaków”, jak to możliwe)
Martin
Jeśli tak naprawdę jest „tak wiele znaków, jak to możliwe”, to jak mówi @gary, powinieneś rozważyć clob, prawda?
Jack Douglas,
4

Jeśli mniejsza wartość będzie działać dla 98% przypadków, ale Varchar2 (4000) będzie działać dla 100% przypadków, wtedy nie masz innego wyboru, jak użyć większej wartości . Utworzenie oddzielnej tabeli dla 2% wartości, a następnie koordynacja wstawiania / selekcji itp. Zwiększyłoby złożoność, która zniszczyłaby wszelkie korzyści pamięciowe lub wydajnościowe wynikające z nierozszerzania pola.

Leigh Riffel
źródło