Consultas y Transformación Avanzada de Datos
Diseño y Optimización Avanzada de Bases de Datos con SQL y MySQL
Construcción de Base de Datos en MySQL: Terminal, Tablas y Datos Simulados
Transformación de Datos con SQL: De Consultas Simples a Superqueries
Columnas Generadas en SQL
Expresiones Regulares y Slugs en SQL y MySQL: Casos de Uso Reales
Automatización, Reutilización y Eficiencia en Consultas
Vistas y Tablas Virtuales en SQL
Consultas Anidadas y Vistas Materializadas
Triggers y Vistas Materializadas en MySQL (Kinda)
Automatización de Bases de Datos con Triggers en MySQL
Llaves Primarias e Índices
Trabajo con Datos Avanzados (JSON)
Uso de JSON en MySQL: Almacenamiento Eficiente de Datos Estructurados
Búsquedas Avanzadas con JSON en MySQL: Indexación y Optimización
Joins en SQL: Conecta Tablas y Mejora tus Consultas
Motores de Almacenamiento y Encodings
Gestión de Usuarios y Permisos en SQL
Gestión Avanzada y Análisis de Bases de Datos
Information Schema en MySQL: Análisis Interno de tu Base de Datos
Mysqldump
Domina las Migrations: Evoluciona y Gestiona tu Base de Datos con Eficiencia
Optimiza tus Decisiones con Metabase
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
La capacidad de generar columnas calculadas en MySQL representa una poderosa herramienta para optimizar el manejo de datos y automatizar operaciones. Las columnas generadas permiten realizar cálculos directamente en la base de datos, evitando la necesidad de procesar esta información en la capa de aplicación y proporcionando una forma elegante de mantener la consistencia de los datos derivados.
Las columnas generadas (generated columns) son campos cuyo valor se calcula automáticamente a partir de una expresión definida, utilizando otros campos de la misma tabla. Estas columnas funcionan de manera similar a las fórmulas en hojas de cálculo, donde el valor se determina mediante una operación matemática o manipulación de texto.
En MySQL, existen dos tipos principales de columnas generadas:
Para crear una columna generada, podemos utilizar la siguiente sintaxis básica:
CREATE TABLE example (
example_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
quantity INT NOT NULL,
price FLOAT NOT NULL,
total FLOAT AS (quantity * price)
);
En este ejemplo, la columna total
se calcula automáticamente multiplicando quantity
por price
. Por defecto, MySQL crea columnas generadas virtuales, pero podemos especificar que sean almacenadas añadiendo la palabra clave STORED
:
CREATE TABLE example (
example_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
quantity INT NOT NULL,
price FLOAT NOT NULL,
total FLOAT AS (quantity * price) STORED
);
También podemos añadir columnas generadas a tablas existentes:
ALTER TABLE products
ADD COLUMN description_length INT
AS (LENGTH(description)) VIRTUAL;
La elección entre columnas generadas virtuales o almacenadas depende de varios factores:
Ventajas:
Desventajas:
Ventajas:
Desventajas:
La decisión debe basarse en el patrón de uso de la tabla: si predominan las operaciones de lectura, las columnas almacenadas pueden ser más eficientes; si predominan las escrituras, las columnas virtuales podrían ser preferibles.
Como vimos en el ejemplo inicial, podemos calcular automáticamente el total de una línea de pedido:
INSERT INTO example (quantity, price) VALUES (10, 20.30);
INSERT INTO example (quantity, price) VALUES (1, 70.50);
INSERT INTO example (quantity, price) VALUES (3, 10);
INSERT INTO example (quantity, price) VALUES (5, 13.90);
SELECT * FROM example;
El resultado mostrará los totales calculados automáticamente:
example_id | quantity | price | total
-----------+----------+--------+-------
1 | 10 | 20.30 | 203.00
2 | 1 | 70.50 | 70.50
3 | 3 | 10.00 | 30.00
4 | 5 | 13.90 | 69.50
Las columnas generadas también son útiles para operaciones con texto. Por ejemplo, podemos calcular la longitud de una descripción:
SELECT product_id, name, description_length,
SUBSTRING(description, 1, 15)
FROM products
ORDER BY RAND()
LIMIT 10;
Esto nos permite:
SELECT COUNT(*)
FROM products
WHERE description_length < 70;
Al implementar columnas generadas, debemos tener en cuenta:
Impacto en el rendimiento: Las columnas almacenadas pueden ralentizar las operaciones de escritura, mientras que las virtuales pueden afectar las consultas.
Espacio en disco: Las columnas almacenadas aumentan el tamaño de la tabla.
Complejidad de la expresión: Expresiones muy complejas pueden afectar significativamente el rendimiento.
Indexación: Solo las columnas almacenadas pueden ser indexadas directamente.
Las columnas generadas en MySQL ofrecen una forma elegante de mantener datos derivados sin necesidad de lógica adicional en la aplicación. Esta funcionalidad permite delegar cálculos a la base de datos, mejorando la consistencia y simplificando el código de la aplicación.
¿Has utilizado columnas generadas en tus proyectos? ¿Qué otros casos de uso consideras que podrían beneficiarse de esta funcionalidad? Comparte tu experiencia en los comentarios.
Aportes 0
Preguntas 0
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?