Optimizando consultas en MySQL

Hay un artículo muy bueno con 20 consejos para mejorar MySQL que recomiendo a todos leer antes de seguir con este post porque básicamente lo que haré será ampliar o rebatir alguno de los puntos del mismo.

mysql-and-piwik-speed

El primer punto que me gustaría modificar es el 5, indexar los campos para utilizarlos con consultas que utilicen JOIN. Básicamente lo que dice este punto es que los campos de unión entre tablas deben ser del mismo tipo y estar indexados, yo a eso añadiría que ambas tablas deben ser del tipo Innodb y ambos campos tener una relación entre ellos con una Foreign Key, así no solo garantizamos las premisas anteriores sino que se asegura la integridad de los datos en ambas tablas. Lo ideal para hacer uniones entre tablas es que uno de los campos sea una clave primaria y el otro una clave foránea que apunte a ella.

En el punto 16, particionamiento vertical, no estoy del todo de acuerdo, partir una tabla por partirla y creer que esto mejorará el rendimiento porque tiene menos datos o menos accesos no me parece ideal, creo que lo ideal si queremos tener unas estructura correcta es seguir una a una las formas normales para bases de datos relacionales, en concreto el particionamiento vertical vendría a ser algo parecido a aplicar correctamente la tercera forma normal.

Sobre esto me gustaría añadir que lo que sí podría aumentar el rendimiento y la velocidad de consultas SELECT seria el particionamiento horizontal de tablas con gran tamaño.

Los que han leído este blog saben que no soy partidario de los frameworks para lenguajes servidor así que tampoco soy partidario de utilizar el mapeo de objetos relacionales, si estamos hablando de optimizar nuestras consultas no lo recomiendo, si por el contrario lo que quieres es ganar tiempo de desarrollo (que lo dudo por el tiempo de aprendizaje) entonces es probable que si te convenga utilizarlo.

Otro manual básico de optimización de consultas en MySQL es la propia documentación oficial, con un extenso capítulo dedicado a este tema.

De estos otros consejos para optimizar MySQL me gustaría señalar la utilización de campos binarios en vez de campos de texto, guardar la información redundante en algunos casos, el uso de BETWEEN, IN, LEAST, GREATEST o INTERVAL, unificar consultas a la hora de insertar datos y evitar operaciones matemáticas al seleccionar datos.

Comentarios