Avatar billede raos Nybegynder
16. juli 2003 - 08:54 Der er 9 kommentarer og
1 løsning

At vælge den rigtige felt størrelse

Jeg har et par teoretisk spørgsmål. Generelt er er spørgsmålet: skal jeg bruge nvarchar(50), nvarchar(4000) eller nText(16) til mine “string fields” i  database designet.

Jeg ved at det er god latin ikke at bruge nText hvis man kan nøjes med f.eks. nvarchar(50). Men:
1.    Hvor meget langsommere er nText og 4000 – og i hvilke operationer?
2.    Vil det kræve mere diskplads at bruge nText eller 4000?
3.    Vil det kræve mere RAM på serveren at bruge nText eller 4000?

På forhånd tak.
Avatar billede arne_v Ekspert
16. juli 2003 - 09:12 #1
Hvis du ved at dine string højest vil være X tegn og X <= 4000, så bør
du bruge nvarchar(4000).

Både med nvarchar og ntext bruger du kun plads for den faktiske kængde ikke
for den maksimale længde.

nvarchar vil være hurtigere end ntext. Hvor meget præcist er svært at sige.

Der vil næppe være den store forskel på RAM forbrug uanset hvad du vælger.
Avatar billede arne_v Ekspert
16. juli 2003 - 09:12 #2
Jeg faldt iøvrigt lige over følgende artikel:
  http://www.databasejournal.com/features/mssql/article.phpr/2212141
Avatar billede bennytordrup Nybegynder
16. juli 2003 - 10:49 #3
Du bør begrænse dine tekst-felter mest muligt. Der er en øvre grænse på poststørrelse på ca. 8000 tegn. Vurder alle felter og find den sandsynlige største tekst, der skal i et givet felt.

Desuden, hvis du har felter, der altid er x antal tegn (f.eks ISO valutakode (3 tegn)), er det en fordel at bruge char(x) eller nchar(x). Med varchar kan du komme ud for reference pointers, hvis indholdet ændres til mere end det først gemte.

Forskellen på nchar og char er unicode. nchar (og nvarchar) kan gemme unicode tegn, men det forøger feltstørrelsen til det dobbelte.
Avatar billede trer Nybegynder
18. juli 2003 - 15:49 #4
Vælg altid den mindste felttype som matcher dine behov. Sørg altid for, at din row-længde er mindre end 8Kb - SQL server tillader at du definerer længere rækker - men indsættelse og opdatering vil fejle når data når over 8Kb.

Blob (Binary Large Objects - altså ntext, text, etc) bør undgås, bl.a. fordi den felttype ikke kan indexeres. Selve håndteringen af blob felterne er også langsommere idet de foregår i et specielt memory område og ikke sammen med de øvrige felter i rækken. Der er i øvrigt et leak i dette område som over tid vil gøre at blob-behandling fejler (kan p.t. ikke huske om det er patchet).

Ved brug af CHAR fremfor VARCHAR - vær opmærksom på, at et CHAR altid fylder den definerede længde, den bliver reelt set udvidet med blanktegn til max længde. VARCHAR indeholder kun de indtastede data. Eks.

VARCHAR(5) = 'OLE'
CHAR(5) = 'OLE  '

Det har lidt betydning i en where-betingelse...
Avatar billede arne_v Ekspert
31. juli 2003 - 08:19 #5
raos>

Tid at lukke spørgsmålet ?
Avatar billede dreyfusdk Nybegynder
18. november 2004 - 19:34 #6
Hey,

Hvad gør man så hvis man står i en situation hvor man har brug for et tekstfelt på fx. 16.000 tegn istedet for de max. 8000 der er?
Avatar billede arne_v Ekspert
18. november 2004 - 19:37 #7
1)  fortæller programmørerne at de kun har 8000
2)  splitter i 2 VARCHAR felter
3)  skifter fra VARCHAR til TEXT
Avatar billede dreyfusdk Nybegynder
18. november 2004 - 19:42 #8
Korrekt forstået at TEXT kan indeholde voldsomt mange tegn - eller vil du have at man tager to VARCHAR felter og splitter dem sammen til én variablen ved output som så præsenteres?
Avatar billede arne_v Ekspert
18. november 2004 - 19:49 #9
TEXT kan indeholde 2 GB.

2 VARCHAR som man konkatanerer i applikationen er også set som workaround.
Avatar billede trer Nybegynder
20. november 2004 - 15:45 #10
Men 2 varchar på hver 8000 tegn kan ikke lagres i en række - det skal være i to rækker.  Max længden er stadig 8k for en enkelt row.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester