Impatto sulla velocità dell'utilizzo di varchar in SQL Server 2008


9

Ai vecchi tempi, usare varcharover charera un grande no, dato che varcharera memorizzato su una pagina diversa rispetto al resto della riga. È ancora così oggi con SQL Server 2008? Vedrò alcun guadagno di memoria / prestazioni cambiando 1-3 varchar(5)colonne in char(5)colonne su una tabella con

a) dire 2.000.000 di righe b) se una delle varcharcolonne fa parte degli indici / le chiavi primarie


2
Possibile duplicato della domanda In che modo campi troppo lunghi (varchar / nvarchar) influiscono sulle prestazioni e sull'utilizzo del disco? (MSSQL Server 2008) . Se pensi che non sia un duplicato, sicuramente troverai anche lì delle risposte.
Marian

Risposte:


8

Stai confondendo text / varchar (max) (tipi LOB) con varchar (n) / char (n)

Altrimenti, se si utilizza char (1000) non varchar (1000) e la lunghezza media dei dati è, diciamo, 42, si tratta di un design errato e di molto spazio sprecato.


in DB2 e alcuni altri motori DB char e varchar sono stati archiviati in modo diverso e alcuni dei consigli per DB2 sono stati trasferiti su SQL Server.
Andrew Bickerton,

@Andrew Bickerton: l'ennesimo mito ...
gbn

puoi indicarmi la direzione in cui è stato sfatato quel mito? (Sono d'accordo che il consiglio non si applica a SQL Server)
Andrew Bickerton

Mi riferisco anche a una delle versioni originali di DB2 (probabilmente non è stata così negli ultimi 10 anni), simile al consiglio con SQL 2000 che i PK dovrebbero essere non cluster a causa di problemi di prestazioni ancora presenti - sebbene non è più vero
Andrew Bickerton,

@Andrew Bickerton: guarda semplicemente sulle strutture del disco di SQL Server (diverse risposte SO da me) stackoverflow.com/search?q=user%3A27535+anatomy . Ci scusiamo per la risposta tardiva
gbn

3

È difficile parlarti di specifici miglioramenti o hit delle prestazioni senza conoscere meglio il tuo schema, ma in generale vuoi definire il tipo di dati in modo che corrisponda ai tuoi dati. Se hai bisogno di una larghezza fissa (ad esempio, sai che avrai sempre cinque caratteri) allora dovresti usare char (5). Se hai una quantità variabile di dati, dovresti usare varchar (5).

Per SQL, maggiore è il numero di dati che è possibile inserire in una pagina, migliori sono le prestazioni.


3

Per quanto ne so, SQL Server non ha mai archiviato tipi di dati varchar o nvarchar fuori dalla riga. Testo e NText sono diversi. Ci sono alcuni bit extra che sono memorizzati per una colonna a larghezza variabile ma questo è tutto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.