Sección 1: Conceptos Generales
· ❓ Explica la diferencia entre InnoDB y MyISAM.
✅ Respuesta: InnoDB soporta transacciones,
foreign keys, ACID y bloqueo a nivel de fila. MyISAM no soporta transacciones
ni foreign keys, y usa bloqueo a nivel de tabla.
· ❓ ¿Qué es ACID y por qué es importante en bases de datos?
✅ Respuesta: ACID son propiedades de
Atomicidad, Consistencia, Aislamiento y Durabilidad, esenciales para asegurar
integridad y confiabilidad de los datos.
· ❓ ¿Qué son foreign keys y cómo funcionan en MySQL?
✅ Respuesta: Son claves que establecen
relaciones entre tablas, asegurando integridad referencial y evitando registros
huérfanos.
· ❓ Diferencia entre INNER JOIN, LEFT JOIN y RIGHT JOIN.
✅ Respuesta: INNER JOIN devuelve solo
coincidencias entre tablas. LEFT JOIN devuelve todas las filas de la izquierda
y las coincidencias de la derecha. RIGHT JOIN devuelve todas las filas de la
derecha y coincidencias de la izquierda.
· ❓ ¿Qué es un stored procedure y cuáles son sus ventajas?
✅ Respuesta: Es un conjunto de
instrucciones SQL almacenadas en el servidor. Ventajas: reutilización,
mantenimiento centralizado, reducción de tráfico de red y mejora de seguridad.
Sección 2: SQL Práctico
· ❓ Consulta que devuelva el salario máximo por departamento.
✅ Respuesta: SELECT departamento_id,
MAX(salario) AS salario_maximo FROM Empleados GROUP BY departamento_id;
· ❓ Total de ventas por mes en 2024.
✅ Respuesta: SELECT MONTH(fecha) AS mes,
SUM(monto) AS total FROM Ventas WHERE YEAR(fecha)=2024 GROUP BY MONTH(fecha);
· ❓ Optimiza la consulta: SELECT * FROM pedidos WHERE YEAR(fecha) = 2024;
✅ Respuesta: Usar rango de fechas para
aprovechar índices: SELECT * FROM pedidos WHERE fecha BETWEEN '2024-01-01' AND
'2024-12-31';
· ❓ Encuentra clientes que no tienen compras.
✅ Respuesta: SELECT c.id, c.nombre FROM
Clientes c LEFT JOIN Compras p ON c.id = p.cliente_id WHERE p.cliente_id IS
NULL;
Sección 3: Administración y Mantenimiento
· ❓ Cómo realizar un backup completo y diferencial en MySQL.
✅ Respuesta: Usar mysqldump para backup
completo: mysqldump -u user -p --all-databases > backup.sql. Para
diferencial, usar binlog para registrar cambios desde el último backup.
· ❓ Qué es binary log y para qué se utiliza.
✅ Respuesta: Binary log registra todas las
modificaciones de datos. Se usa para replicación y recuperación punto en el
tiempo.
· ❓ Cómo monitorear uso de CPU, memoria y conexiones activas.
✅ Respuesta: Usar SHOW PROCESSLIST,
performance_schema, y herramientas del sistema operativo como top o htop.
· ❓ Servidor con alta carga de consultas. Qué pasos seguirías.
✅ Respuesta: Identificar consultas lentas
con slow query log, analizar índices, revisar locks, optimizar consultas y
revisar configuración del servidor.
Sección 4: Performance Tuning
· ❓ Qué es query cache y cómo afecta el rendimiento.
✅ Respuesta: Query cache guarda resultados
de consultas para acelerar respuestas repetidas. Puede mejorar rendimiento en
lecturas frecuentes, pero actualizar datos vacía cache.
· ❓ Diferencia entre Index Seek y Full Table Scan.
✅ Respuesta: Index Seek usa índice para
encontrar filas específicas (eficiente). Full Table Scan recorre toda la tabla
(menos eficiente).
· ❓ Cómo identificar consultas lentas y herramientas.
✅ Respuesta: Usar slow query log, EXPLAIN,
performance_schema, y herramientas como MySQL Workbench.
· ❓ Qué es EXPLAIN y cómo usarlo.
✅ Respuesta: EXPLAIN muestra el plan de
ejecución de una consulta, permitiendo identificar operaciones costosas y
optimizar índices o joins.
Sección 5: Seguridad
· ❓ Diferencia entre usuarios y privilegios en MySQL.
✅ Respuesta: Usuarios son cuentas de
acceso. Privilegios definen qué operaciones puede realizar cada usuario.
· ❓ Cómo implementar principio de mínimo privilegio.
✅ Respuesta: Asignando únicamente los
permisos necesarios a cada usuario o aplicación para realizar sus tareas.
· ❓ Cómo habilitar SSL/TLS para conexiones MySQL.
✅ Respuesta: Configurar certificados SSL en
el servidor, habilitar require_ssl para usuarios y usar CLIENT_SSL al conectar.
· ❓ Medidas para prevenir SQL Injection.
✅ Respuesta: Usar consultas preparadas
(prepared statements), validación de entradas, stored procedures y limitar
privilegios de usuario.
Sección 6: Escenarios de Resolución de Problemas
· ❓ Base de datos lenta. Cómo diagnosticar.
✅ Respuesta: Revisar consultas lentas con
slow query log, identificar locks, revisar índices y recursos del servidor
(CPU, memoria, disco).
· ❓ Servidor se reinició y hay datos recientes no confirmados.
✅ Respuesta: Usar binary logs para
recuperar cambios recientes hasta el último commit confirmado.
· ❓ Replicación maestro-esclavo con retrasos.
✅ Respuesta: Verificar estado de esclavo
con SHOW SLAVE STATUS, revisar latencia de red, conflictos de datos y tamaño de
transacciones pendientes.
· ❓ Base de datos creciendo y llenando disco.
✅ Respuesta: Mover tablas grandes a otros filegroups/discos, purgar logs antiguos, comprimir tablas e índices y ampliar almacenamiento.