varchar vs. char - Performance?



  • Hi,
    ich habe ein Frage bezüglich der Performance von varchar vs. char. In der Berufsschule (schon ein paar Jahre her) habe ich mal gelernt das char (wesentlich) schneller sein soll als varchar.
    Wir haben eine Tabelle mit 9 Mio Zeilen und ca. 45 Spalten.
    Es sind ca. 20 Spalten mit varchar(500) (manchmal mehr manchmal weniger Zeichen). Diese 500 Zeichen werden natürlich nicht immer ausgenutzt, deswegen auch varchar aber ich würde lieber Speicherplatz verschwenden als in komplett neue Hardware zu investieren (Speicherplatz kostet ja nichts mehr)
    Da ich leider keinen genauen Vergleich fahren kann (die Tabelle kopieren und die kopierte Tabelle auf char umstellen) wollte ich hier mal nachfragen was Ihr dazu sagt. Macht es Sinn auf char umzusteigen oder bringt das nur ein Performancegewinn von weis ich 5%?

    schirrmie



  • Hm einfach mal ausprobieren würd ich sagen. Solche Sachen teste ich immer direkt selbst weil es u.a. vom eigesetzten DB System abhängig ist.



  • Oh tut mir Leid hab ich vergessen zu schreiben, wir nutzen MS Sql Server 2000.
    Und wie gesagt einen direkten Vergleich kann ich nicht fahren weil ich nicht mal eben die Tabelle kopieren kann mit ihren 9Mio Datensätze.

    schirrmie



  • Wieso nicht? Kopiere doch einfach nur 100.000 oder so. Dazu musst du aber zwei Tabellen zum Testen anlegen, in die du jeweils per

    INSERT INTO TEST1 SELECT * FROM ORIGINAL FETCH FIRST 100000 ROWS ONLY
    INSERT INTO TEST2 SELECT * FROM TEST 1

    (Das FETCH Blah... heisst bei MS SQL glaube ich LIMIT X wenn ich micht recht erinnere).

    Jetzt kannst Testen.

    Davon abgesehen sollte es auch kein besonderes Problem sein, einfach zwei Tabellen anzulegen und die mit irgendwelchen Müll-Daten zu füllen. Für einen Performance-Test ist der eigentliche Inhalt der Tabelle ja egal.



  • frenki schrieb:

    (Das FETCH Blah... heisst bei MS SQL glaube ich LIMIT X wenn ich micht recht erinnere).

    LIMIT geht nur bei MySQl, bei MSSQL (Transact-SQL) verwendet man TOP z.B. SELECT TOP(10) * FROM tabelle



  • 20 spalten varchar(500) und 9 Mio. Datensätze?? wie groß ist denn die DAtenbank?



  • datenbankdesigner? schrieb:

    20 spalten varchar(500) und 9 Mio. Datensätze?? wie groß ist denn die DAtenbank?

    Naja... 4190 GB? Grob überschlagen. Wenn man nur 500Bytes und 9Mio. Datensätze nimmt. Also würde man char nehmen, denke ich, müsste auf jeden Fall sicher gestellt sein, dass soviel Speicher zur verfügung steht. Ich glaube mal, so viele Daten zu verwalten, bremst die Datenbank mehr aus. Es sei denn, man hat 4 Terrabyte RAM.



  • EIN CHAR ist deshalb schneller weil dort nicht verwaltet werden muss.
    Es werden immer genaus X Zeichen reserviert.
    Nachteil:
    Es wird Platz verschwendet.
    (Hat man in einer Spalte einen CHAR(20) und sind 8 Mill einträge Länge 10 und nur einer 20 dann unötiger Platz)

    VARCHAR ist wenn man es sich Variable halten möchte
    Nachteil: Langsamer
    Vorteil: Die DB ist nicht so groß und es kann durchaus sein das eine Abfrage schneller ist da DB nicht so groß.

    Es gibt keine WEG der besser ist.
    Es kommt immer auf die gesamte Struktur und Kompromisse an.


Anmelden zum Antworten