Errores en MySQL
Cuando programas en PHP y tu aplicación comienza a tener cierta envergadura, lo más lógico es que necesites apoyarte en un sistema de gestión de bases de datos para almacenar y manipular cualquier dato referente a la misma. En el caso de PHP, el sistema usado en mayor medida es MySQL.
No resulta fácil construir una base de datos sólida, fiable, que esté libre de inconsistencias y vulnerabilidades y que, por tanto, tenga una estructura en base a alguna de las formas normales más comúnmente usadas. Por lo que es habitual que, como programadores en PHP, caigamos en alguno de los principales errores a la hora de trabajar con MySQL.
1. Usar MyISAM en lugar de InnoDB
MyISAM es el motor configurado por defecto en la instalación de MySQL pero, a menos que aún tengas tu base de datos en desarrollo o tu proyecto sea bastante simple, es aconsejable usar InnoDB. Éste admite transacciones, esenciales para la integridad de los datos. Además, a la hora de insertar o actualizar un registro, solo bloquea a éste, y no a la tabla entera como hace MyISAM, teniendo un efecto positivo sobre el rendimiento, sobre todo en las escrituras.
2. No usar las funciones adecuadas para MySQL de PHP
PHP proporciona funciones específicas para la conexión y uso de MySQL. Funciones como mysql_connect, mysql_query, … Estas funciones resultaron mejoradas para versiones de PHP igual o superior a la 4.1.3, por lo que es aconsejable usar esta última, llamada MySQLi. Ésta presenta una serie de ventajas como una intefaz orientada a objetos, prevención de ataques de inyección de SQL mediante las preparedStatements, aumento del rendimiento, etc.
3. No sanear las entradas de usuario
Al no sanear las entradas del usuario y usarlas para crear una sentencia SQL, la cual ejecutaremos sobre la base de datos, estamos dando lugar a una vulnerabilidad permitiendo la inyección de código SQL en los campos desde los cuales tomamos dichos valores.
4. No usar la codificación UTF-8
Utilizar esta codificación evita muchos problemas de internacionalización, ya que debemos tener en cuenta que nuestro sitio web no solamente será accedido desde nuestro propio país, sino desde países cuyos juegos de caracteres difieren mucho de los nuestros.
5. Hacerlo todo mediante PHP
Es habitual realizar toda la codificación mediante el lenguaje PHP, incluso aquellas funciones que resultarían mucho más rápidas si las realizara el propio gestor de bases de datos. Por ejemplo, utilizar un bucle en PHP para calcular un promedio, sumando todos los valores de un conjunto de registros, en vez de usar la función nativa de MySQL, AVG().
De la misma forma, existe la posibilidad de codificar funciones y procedimientos internos en la propia base de datos, favoreciendo el rendimiento de nuestra aplicación en términos globales.
6. No optimizar las consultas
El 99% de los problemas de rendimiento de una aplicación en PHP es causada por la base de datos. Hay que ser consciente de que una simple mala consulta puede causar un cuello de botella en nuestro sitio web, por lo que es recomendable realizar una optimización de las consultas más pesadas.
Existen aplicaciones y scripts que revisarán tu servidor MySQL y te darán consejos para mejorar su rendimiento, así como te mostrarán las posibles consultas que deberían optimizarse.
7. Utilizar tipos de datos incorrectos
MySQL ofrece un conjunto de tipos de datos variado (numérico, cadena, hora, fecha, …). Si vas a almacenar una fecha, usa el tipo DATE o DATETIME, en vez de usar un INTEGER o STRING, que harán más complicada las consultas.
A menudo, es tentador crear tus propios tipos de datos y guardarlos en la base de datos como objetos serializados de PHP. Aunque el manejo de la base de datos será más fácil, te impedirá realizar fácilmente búsquedas y consultas sobre datos almacenados.
8. Usar el asterisco (*) en las consultas SELECT
Nunca uses el asterisco en las consultas SELECT, a menos que sea estríctamente necesario. Intenta siempre hacer una consulta sobre los campos que realmente necesites, los demás son recursos gastados en vano.
9. No indexación o sobre-indexación
Normalmente, los índices se aplican a cualquier columna sobre la que una consulta SELECT realizará su WHERE, por lo que resulta útil el crear índices para las consultas que más recursos consumen y aquellas que normalmente son más usadas.
De la misma forma, el añadir índices a cada columna puede hacer que caiga el rendimiento del servidor debido a que éstos deben ser regenerados durante cada inserción o actualización de la tabla.
10. Olvidarte de hacer copias de seguridad
Aunque no lo creas, las bases de datos fallan, así como los discos duros o cualquier otro hardware o software que pueda tener el servidor donde tengas alojadas tus bases de datos. Si tu aplicativo web tiene cierta importancia, imagina el perder de golpe toda la información sobre el mismo.
Para evitar esto, acostumbra a hacer copias de seguridad periódicas, o simplemente, prográmalas para que se realicen automáticamente.
0 comments:
Publicar un comentario