Tja, in langere velden kan je ook daadwerkelijk langere waarden opslaan, en dan neemt het natuurlijk wel meer ruimte in.
Plus dat alle onderdelen van je software daar rekening mee moeten houden. Het zetten van een specifieke lengte heeft wat dat betreft een belangrijke functionele waarde, en het draagt ook uit wat de bedoeling is (bijvoorbeeld dat een achternaam geen 1000 tekens moet zijn).
Maar inderdaad, daarvan afgezien maakt het niets uit.
Kleine kanttekening dat mijn ervaring vooral met Oracle is, niet met MS SQL, maar volgens mij verschillend de databases in dit opzicht niet zoveel.
In Oracle kan ik dit doen. Iets soortgelijks moet in SQL Server ook wel kunnen:
SQL Code:
CREATE TABLE PERSON1(LASTNAME varchar2(10));
CREATE TABLE PERSON2(LASTNAME varchar2(250));
CREATE TABLE PERSON3(LASTNAME varchar2(4000));
-- "Achternamen" '1' tot '1000000' invullen in elk van de tabellen
INSERT INTO PERSON1 (LASTNAME) SELECT level FROM dual connect BY level <= 1000000;
INSERT INTO PERSON2 (LASTNAME) SELECT level FROM dual connect BY level <= 1000000;
INSERT INTO PERSON3 (LASTNAME) SELECT level FROM dual connect BY level <= 1000000;
commit;
-- Kijken hoeveel ruimte dat nou eigenlijk inneemt
SELECT segment_name, segment_type, bytes
FROM dba_segments
WHERE
segment_type='TABLE' AND
segment_name IN ('PERSON1', 'PERSON2', 'PERSON3');
Die laatste query haalt de ruimte van de tabellen op. Die zijn voor alledrie hetzelfde, tw 14.680.064 bytes. De totale lengte van de lastnames is 5.888.896. De rest zal algemene overhead per rij zijn, dus een row header, en de lengte-headers van de varchars zelf. Als er daadwerkelijk 4000 bytes gereserveerd zou worden, zou PERSON3 veel meer ruimte in moeten nemen.
Bookmarks