Published on

January 1, 2019

Elegir los tipos de datos correctos en SQL Server

¿Alguna vez te has preguntado por qué tus consultas de SQL Server tardan más de lo esperado? Una posible razón podría ser los tipos de datos que has elegido para tus columnas. En este artículo, exploraremos la importancia de seleccionar los tipos de datos adecuados y cómo puede afectar el rendimiento de tus consultas.

Consideremos un escenario hipotético donde todas las columnas de una tabla están definidas como VARCHAR(MAX). Si bien esto puede parecer conveniente al principio, puede llevar a problemas de rendimiento, especialmente al ordenar grandes cantidades de datos.

Para demostrar esto, creemos una tabla llamada Names_Varchar con una columna VARCHAR(MAX):

CREATE TABLE Names_Varchar
(
    Id INT IDENTITY(1,1),
    Names VARCHAR(MAX) NOT NULL,
    SortValue INT
);

A continuación, insertaremos algunos datos de la base de datos StackOverflow 2010 y asignaremos SortValues aleatorios:

INSERT INTO Names_Varchar (Names)
SELECT DisplayName FROM StackOverflow2010.dbo.Users;

UPDATE Names_Varchar
SET SortValue = Id/100;

Ahora, intentemos ordenar los datos:

SELECT Names, SortValue FROM Names_Varchar
ORDER BY SortValue;

Al examinar el plan de ejecución, notamos que SQL Server estimó un requisito de memoria mucho mayor de lo que realmente se utilizó. Esta discrepancia se puede atribuir al tipo de datos VARCHAR(MAX).

Para investigar más, determinamos la longitud máxima de la columna Names:

SELECT MAX(LEN(Names)) FROM Names_Varchar;

El resultado muestra que el nombre más largo tiene 36 caracteres. Con esta información, ahora podemos tomar una decisión informada sobre el tipo de datos adecuado para la columna Names.

Creemos una nueva tabla llamada Names_Varchar_100 con una columna VARCHAR(100):

CREATE TABLE Names_Varchar_100
(
    Id INT IDENTITY(1,1),
    Names VARCHAR(100) NOT NULL,
    SortValue INT
);

Carguemos los mismos datos en esta nueva tabla:

INSERT INTO Names_Varchar_100 (Names, SortValue)
SELECT Names, SortValue
FROM Names_Varchar;

Ahora, volvamos a ejecutar la consulta de ordenación y observemos el uso de memoria:

SELECT Names, SortValue FROM Names_Varchar_100
ORDER BY SortValue;

Esta vez, la memoria deseada y concedida están mucho más cerca de la memoria real utilizada. Al elegir el tipo de datos adecuado, hemos reducido significativamente los requisitos de memoria y mejorado el rendimiento de la consulta.

La moraleja de la historia es evitar usar ciegamente VARCHAR(MAX) para todas las columnas. En su lugar, tómate el tiempo para analizar tus datos y elegir los tipos de datos correctos en consecuencia. En este caso, cambiar de VARCHAR(MAX) a VARCHAR(100) resultó en una reducción dramática en el uso de memoria.

Recuerda, tomar decisiones informadas sobre los tipos de datos puede tener un impacto significativo en el rendimiento de tus consultas de SQL Server. ¡Elige sabiamente!

Gracias por leer. Mantente atento para más consejos y trucos de SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.