Impacto en la velocidad del uso de varchar en SQL Server 2008

9

En los viejos tiempos, el uso de varcharover charera un gran no no, ya que varcharestaba almacenado en una página diferente que el resto de la fila. ¿Sigue siendo el caso hoy con SQL Server 2008? ¿Veré alguna ganancia de memoria / rendimiento al cambiar 1-3 varchar(5)columnas a char(5)columnas en una tabla con

a) diga 2.000.000 de filas b) si alguna de las varcharcolumnas forma parte de índices / las claves principales

Carlo V. Dango
fuente
2
Posible duplicado de la pregunta ¿Cómo afectan los campos demasiado largos (varchar / nvarchar) al rendimiento y al uso del disco? (Servidor MSSQL 2008) . Si crees que no es un duplicado, entonces definitivamente encontrarás algunas respuestas allí también.
Marian

Respuestas:

8

Está confundiendo text / varchar (max) (tipos LOB) con varchar (n) / char (n)

De lo contrario, si usa char (1000) no varchar (1000) y la longitud promedio de los datos es, digamos, 42, este es un mal diseño y una gran cantidad de espacio desperdiciado.

gbn
fuente
bajo DB2 y algunos otros motores DB, char y varchar se almacenaron de manera diferente y algunos de los consejos para DB2 se transfirieron a SQL Server.
Andrew Bickerton
@Andrew Bickerton: otro mito más ...
gbn
¿Puedes señalarme en la dirección de dónde fue desacreditado ese mito? (Estoy de acuerdo en que el consejo no se aplica a SQL Server)
Andrew Bickerton
También me estoy refiriendo a una de las versiones originales de DB2 (probablemente no ha sido así en los últimos 10 años), similar al consejo con SQL 2000 de que las PK no deberían estar agrupadas debido a problemas de rendimiento que aún existen. ya no es verdad
Andrew Bickerton
@ Andrew Bickerton: simplemente mire las estructuras de disco de SQL Server (varias respuestas SO de mí) stackoverflow.com/search?q=user%3A27535+anatomy . Perdón por la respuesta tardía
gbn
3

Es difícil informarle sobre ganancias o resultados de rendimiento específicos sin saber más acerca de su esquema, pero en general desea definir el tipo de datos para que coincida con sus datos. Si necesita un ancho fijo (por ejemplo, sabe que siempre tendrá cinco caracteres), entonces debe usar char (5). Si tiene una cantidad variable de datos, entonces debe usar varchar (5).

Para SQL, cuantos más datos pueda incluir en una página, mejor será su rendimiento.

SQLRockstar
fuente
3

Hasta donde sé, SQL Server nunca ha almacenado tipos de datos varchar o nvarchar fuera de fila. Text y NText son diferentes. Hay unos pocos bits adicionales que se almacenan para una columna de ancho variable, pero eso es todo.

mrdenny
fuente