Los principales motores de búsqueda son MyISAM e InnoDB, pero existen muchos otros como Aria, TokuDB, XtraDB o archive.
MyISAM es mas apropiado en aquellos casos en los que predominen las consultas SELECT.
Sus principales características son:
Bloqueo a nivel de tabla
Mayor velocidad en consultas SELECT
Alta compresión
Búsquedas full-text
No soporta claves foráneas
InnoDB es mas apropiado si predomina los INSERT, UPDATE o DELETE
Sus principales características son:
Bloqueo a nivel de fila
Permite claves foraneas
Búsquedas full-text a partir de la versión 5.6.4
Permite transacciones
Selecciona tan solo aquellas columnas que realmente vayas a utilizar.
Seleccionar mas columnas de las necesarias aumenta el tiempo que tarda en ejecutarse la consulta y el tiempo de transferencia si la BBDD está en un servidor independiente.
Bien:SELECT id, titulo FROM tareas;
Mal:SELECT * FROM tareas;
Utiliza una clausula LIMIT si solo necesitas una determinada cantidad de resultados o si estás filtrando por id y por lo tanto solo hay un resultado como máximo.
Bien:SELECT id, titulo FROM tareas where id = 555 LIMIT 1;
Mal:SELECT id, titulo FROM tareas where id = 555;
Por cada subconsulta que agregues, MySQL va a realizar una query adicional por cada registro de la query principal.
Si tienes una consulta que muestra 100 resultados, realizará 100 consultas adicionales por cada subconsulta.
Bien:SELECT t.id, t.nombre, s.salario
FROM trabajadores t
JOIN salarios s ON s.trabajador = t.id;
Mal:SELECT t.id, t.nombre,
(SELECT salario FROM salarios AS s WHERE s.trabajador = t.id) AS ‘salario’
FROM trabajadores t;
Utiliza exists siempre que sea posible, ya que EXISTS deja de buscar cuando encuentra una coincidencia.
El wilcard (%) penaliza seriamente el rendimiento, utilízalo solo si es estrictamente necesario.
Bien:SELECT id, usuario, password
FROM usuarios
WHERE usuario = ‘bruno’;
Mal:SELECT id, usuario, password
FROM usuarios
WHERE usuario LIKE ‘%bruno%’;
Cuando agregas la claúsula ORDER BY RAND, lo que** MySQL** va a hacer es:
Seleccionar TODOS los registros que cumplan con tu claúcula WHERE
Los carga en memoria o en una tabla temporal
Asociar valores aleatorios a cada fila
Los ordena
Muestra N resultados de acuerdo a la claúsula LIMIT
Algunos motores de BBDD, como Oracle, ni tan siquiera permiten realizar esta acción.
Archive está pensado para guardar un gran volumen de datos.
Permite INSERT y SELECT, pero no DELETE, REPLACE o UPDATE, aunque puedes hacer un TRUNCATE para vaciar la tabla.
Este motor es un buen candidato para hacer la bitácora de nuestra app.
Utiliza siempre el tamaño justo para la columna.
Por ejemplo, si vas a guardar un DNI, no tiene sentido tener un campo de 20 caracteres, ya que el DNI está formado por 9 caracteres.
Algunas funciones impiden a MySQL cachear la consulta, por ejemplo, la función now() obtiene la fecha/hora actual cada vez que se ejecuta.
Una solución sería obtener la fecha en el lenguaje que estés usando junto con SQL (PHP, JAVA, etc)
Muchas gracias tomaré en cuenta tus consejos. Saludos
Un saludo @kestiven, espero te sea de utilidad ❤️
Excelente aporte.
Excelentes recomendaciones, gracias.
Esta bueno el aporte, gracias.
¡Excelente contribución! Me pregunto si podría recomendarme algún curso para obtener una comprensión más profunda de todo el contenido, o al menos del punto 8 que ha capturado mi curiosidad.