Capítulo 10 Resumen de mejores prácticas
Aquí hay un resumen de todas las mejores prácticas de desempeño que discutimos en este curso. Esta lista no está completa de ninguna manera, pero contiene pautas que puedenayudar a resolver muchos problemas de rendimiento.
Las tablas más pequeñas funcionan mejor. No almacene los datos que no necesita. Resuelve problemas de hoy, no los problemas futuros del mañana que tal vez nunca sucedan.
Utilice los tipos de datos más pequeños posibles. Si necesita almacenar la edad de las personas,TINYINT es suficiente. No es necesario utilizar un INT. Ahorrar unos pocos bytes tiene un impacto significativo en una tabla con millones deregistros.
Cada tabla debe tener una clave primaria.
Las claves primarias deben ser cortas. Prefiera TINYINT a INT si solo necesita almacenar unos cien registros.
Prefiera los tipos numéricos a las cadenas para las claves primarias. Esto hace que buscar registros por la clave principal sea más rápido.
Evite los BLOB. Aumentan el tamaño de su base de datos y tienen un efecto negativo en el rendimiento. Guarde sus archivos en el disco si puede.
Si una tabla tiene con demasiadas columnas, considere dividirla en dos tablas usando una relación uno a uno. A esto se le llama partición vertical. Por ejemplo, puede tener una tabla de clientes con columnas para almacenar susu direcciones. Si estas columnas no se leen con frecuencia, divida la tabla en dos tablas (usuarios y direcciones_usuario).
Por el contrario, si tiene varias combinaciones en sus consultas debido a la fragmentación de datos, es posible que desee considerar la desnormalización de los datos. La desnormalización es lo opuesto anormalización. Implica duplicar una columna de una tabla en otra tabla (para reducir el número de uniones) requerido.
Considere la posibilidad de crear tablas de resumen / caché para consultas costosas. Por ejemplo, si la consulta para obtener la lista de foros y el número de publicaciones en cada foro es caro, cree una tabla llamada forums_summary que contenga la lista de foros y el número de publicaciones en ellos. Puede utilizar eventos para actualizar periódicamente los datos de esta tabla. También puede utilizar activadores para actualizar los recuentos cada vez que hay una nueva publicación. Los escaneos de tablas completas son una de las principales causas de las consultas lentas. Utilice la declaración EXPLAIN y busque consultas con type = ALL. Estos son escaneos completos de tablas. Utilice índices para optimizar estas consultas.
Al diseñar índices, primero observe las columnas en sus cláusulas WHERE. Esos son los primeros candidatos porque ayudan a reducir las búsquedas. A continuación, observe las columnas utilizadas en las cláusulas ORDER BY. Si existen en el index, MySQL puede escanear su índice para devolver datos ordenados sin tener que realizar una operación de clasificación (ordenamiento de archivos). Finalmente, considere agregar las columnas en SELECT a sus índices. Esto le da un índice de cobertura que cubretodo lo que necesita tu consulta. MySQL no necesita recuperar nada mas.
Prefiera los índices compuestos a varios índices de una sola columna.
El orden de las columnas en los índices es importante. Ponga las columnas más utilizadas y las columnas con una cardinalidad más alta primero, pero siempre tome sus consultas en cuenta.
Elimine índices duplicados, redundantes y no utilizados. Los índices duplicados son los índices en el mismo conjunto de columnas con el mismo orden. Los índices redundantes son índices innecesarios que se pueden reemplazar con los índices existentes. Por ejemplo, si tiene un índice en las columnas (A, B) y crea otro índice de la columna (A), el último es redundante porque el índice anterior le puede ayudar.
No cree un nuevo índice antes de analizar los existentes.
Aísle sus columnas en sus consultas para que MySQL pueda usar sus índices.
Evite SELECT *. La mayoría de las veces, seleccionar todas las columnas ignora sus índices y devuelve columnas innecesarias que puede que no necesite. Esto pone una carga extra en su servidor de base de datos.
Devuelva solo las filas que necesite. Utilice la cláusula LIMIT para limitar el número defilas devueltas.
Evite las expresiones LIKE con un comodín inicial (por ejemplo, LIKE ‘% name’).
Si tiene una consulta lenta que usa el operador OR, considere cortar la consulta en dos consultas que utilizan índices separados y los combinan utilizando el Operador UNION.