16. juli 2003 - 08:54Der 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?
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.
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.
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?
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.
Synes godt om
Ny brugerNybegynder
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.