Consejos para optimizar tu base de datos

Interesantes consejos para optimizar nuestra base de datos en nuestras aplicaciones:

  • Aunque parezca mentira, no siempre es necesario una base de datos relacional. Existen alternativas como memcache, base de datos documentales o de clave-valor.
  • No uses la BD para almacenar contenidos: imágenes o documentos en BLOB.
  • Usa campos numéricos y autoincrementales para los índices primarios, para así tener un acceso rápido al registro, ya que inserts, updates y selects dependen mucho de este índice.
  • Analiza correctamente el uso de índices al igual que haces un análisis detallado de la estructura de la BD.
  • Realiza queries sencillas, en las que solo debes recuperar los campos que necesites y evitar el uso de LIKE y NOT IN

Una lectura interesante y más detallada.

Database Optimize patterns

5 consejos para optimizar sentencias en MySQL

Interesantes consejos a tener en cuenta cuando realizamos nuestras aplicaciones usando MySQL:

  • Optimización de tipos: intenta evitar el uso de NULLs ya que requieren más operaciones internas en MySQL. Usa el tamaño correcto para las variables, por ejemplo, si vas a usar un número pequeño no uses INT.
  • Cuidado con la codificación de caracteres: inserta los datos siempre en la misma codificación, si tienes orígenes con diferentes codificaciones modificalo antes de insertar.
  • Optimización de COUNT: COUNT(*) sin un WHERE no necesita acceder a la tabla para obtener los resultados, al igual sin en vez de asterisco usamos un campo de la tabla que no tenga valores NULL. En el caso de que haya WHERE, poco se puede hacer para optimizar la consulta salvo usar índices correctamente.
  • Optimización de subqueries: MySQL no optimiza muy bien las subqueries por lo que es preferibles pasarlas a una JOIN. Incluso realizar dividir en dos queries independientes puede ser una buena alternativa.
  • Optimización de UNION: UNION devuelve la unión de los datos de dos tablas que no se hayan en la otra, por lo que realizan un UNIQUE y una ordenación. Usa UNION ALL si estás seguro de que las distintas consultas no tienen datos repetidos (o no te importa que esté repetidos).

Five Query Optimizations in MySQL

Errores comunes a la hora de optimizar

Interesantes consejos que nos ofrece Ilia Alshanetsky sobre la optimización de nuestras aplicaciones. Resumiendo el PDF de una charla que dió que ha compartido, tenemos:

  • Ten claro que va a hacer tu aplicación antes de meterte a optimizar
  • Basa tus cálculos sobre crecimiento y escalabilidad sobre datos reales, no sobre pajaras mentales de los comerciales
  • Más código no implica más lentitud, modulariza tu código para obtener mejores resultados
  • Piensa sobre el tiempo/gasto de desarrollo por ingenieros y el gasto en nuevo hardware. Esta solución no siempre es válida, ya que evitar cuellos de botella añadiendo servidores puede ser causa de mayores problemas en el futuro. Si tu código o consultas a la BD no son eficiente, es mejor optimizarlas. Para conseguir una mejora de rendimiento del 5% mejor no te molestes en optimizar el código.
  • La optimización de código puede originar fallos en otras partes de la aplicación
  • Cuidado con los includes: la compilación puede tardar más que la propia ejecución
  • Cache, preferiblemente en memoria, tanto datos recuperados de la BD como procesos que tarden en ejecutarse
  • No todo tiene que ser en tiempo real
  • Fíjate sobre todo en la base de datos, suele ser lo primero que necesita optimización
  • Usa herramientas para encontrar los cuellos de botella
  • Micro-optimizaciones no solucionarán tus problemas de rendimiento
  • Si crees que vas a crecer, la escalabilidad es más importante que la velocidad
  • No reinventes la rueda, crearte funciones que hacen lo mismo que funciones nativas de PHP es inutil

Common Optimization Mistakes

Vía / iBlog – Ilia Alshanetsky

Optimizar MYSQL seleccionando correctamente los tipos de los campos

Algo muy importante para desarrollar una aplicación web es diseñar correctamente la base de datos MySQL, en este caso los tipos de los campos.
Algunos errores que se suelen cometer es por ejemplo usar texto para almacenar cantidades de dinero porque aparece el carácter de la moneda, cuando lo más lógico es formatear el valor obtenido en la base de datos en tus páginas.
Por ello lo primero es saber qué tipo de campo vamos a usar, numérico o texto, y luego saber qué subtipo seleccionar. Debemos tener en cuenta dos factores, cuánto espacio en disco ocupa y cuánto tiempo de proceso requiere.
Por ello, no es lo mismo seleccionar un CHAR que un VARCHAR, CHAR tiene ancho fijo, pero VARCHAR es más rápido de procesar, debemos tener en cuenta si nuestra base de datos va a ocupar poco o si necesita rapidez y actuar en consecuencia seleccionando el tipo correcto para los campos de las tablas.
Leed más, sobre todo la comparativa de tipos de campos, en el siguiente artículo.
Making your MySQL Tables More Effeciant by Using Correct Fieldtypes
Vía / dzone

Identificar queries lentas en MySQL

Algo muy importante a la hora de desarrollar un proyecto es identificar los puntos que ralentizan la devolución de la página web. Algo que suele provocar esta demora son las sentencias SQL lentas.

En el artículo al que hacemos referencia, explica paso a paso cómo encontrar las queries más lentas. Para ello primero se comprueba si se muestran los logs de sentencias lentas y si no es así, las modificaciones que hay que realizar para que se muestren. Después nos explican el significado de los logs y una utilidad para tratarlos.

Estos consejos solo son válidos para Unix, los usuarios de Windows deberán usar los logs de la aplicación para detectar el punto donde tarda en ejecutarse y luego mediante la sentencia EXPLAIN
estudiar la ejecución de las consultas.

Identifying MySQL slow queries

Vía / dzone