Los índices suelen ser la primer opción al momento de optimizar una base de datos MySQL. Sin embargo, no se trata de crear índices así porque si sobre cualquier campo.

Los siguientes, son una serie de consejos a la hora de crear índices:

  • Indexar solo las columnas que lo ameriten: indexar solo las columnas sobre las que se realizan búsquedas, es decir, aquellas que se utilizan en un WHERE o un JOIN.
  • Utilizar índices únicos: los índices trabajan mejor sobre columnas con valores únicos y peor en aquellas que tienen muchos duplicados.
  • Utilizar índices cortos: prestar especial cuidado al momento de utilizar índices sobre campos CHAR. Para tal caso, no es conveniente indexar columnas enteras, si la mayor parte de los valores son únicos dentro de los 10 o 20 primeros caracteres, basta con indexar esa cantidad de caracteres.
  • No abusar de los índices: los índices deben ser actualizados, y reorganizados cuando se realicen INSERTs, UPDATEs y DELETEs. lo que ralentiza el sistema.
  • Considerar el tipo de comparaciones a realizar en un registro: los índices se utilizan con los operadores <, <=, =, >=, >, BETWEEN y LIKE, no así con las funciones. Por lo tanto, si se utiliza la función STRCMP() para la comparación de cadenas, es innecesario un índice.

Vía: tufuncion

A continuación veremos un pequeño ejemplo de trigger en MySQL, que guarda los datos de una tabla en otra, cada vez que estos se modifican. La segunda tabla puede servir para el seguimiento y auditoría de la modificaciones realizadas en la tabla principal.

(más…)

MySQL 5.1

Sun anuncia la versión 5.1 de MySQL durante la primer conferencia de prensa organizada desde que adquirió MySQL.

Según indican, si bien 5.1 suena como una versión incremental, tiene algunas funciones muy importantes, que hacen que tranquilamente se pudiera haber llamado 6.0.

Además de corrección de errores y mayor fiabilidad, las novedades de la versión incluyen:

  • Particionado de tablas
  • Programación de eventos
  • Replicación basada en filas

(más…)

  1. Utilizar el comando EXPLAIN
  2. Utilizar permisos poco complejos: permite reducir la sobrecarga cuando los clientes ejecutan las sentencias
  3. Utilizar la función BENCHMARCH() para ver lo rápido que MySQL procesa la expresión
  4. Optimizar la cláusula WHERE: elimine paréntesis innecesarios. Use la opción SQL_SMALL_RESULT para indicarle al optimizador que el conjunto de datos a devolver es pequeño
  5. Ejecutar OPTIMIZE TABLE: defragmenta, repara y ordena los archivos
  6. Evitar columnas de longitud variable como VARCHAR, BLOB, and TEXT
  7. Utilizar INSERT DELAYED cuando los clientes no pueden esperar a que el INSERT se complete
  8. Priorizar las sentencias con INSERT LOW_PRIORITY y SELECT HIGH_PRIORITY
  9. Usar INSERT múltiple para insertar varias filas (INSERT INTO … VALUES (…),(…),(…) )
  10. Sincronizar los tipos de datos. Por ejemplo, que los tipos de datos de los campos utilizados en un JOIN sean los mismos.

Vía: 10 tips for optimizing mysql queries

La sentencia EXPLAIN “explica” como son ejecutadas las consultas en MySQL. A través de la misma se puede saber si necesita leer toda la tabla, si se utilizan índices, el número de filas exploradas e información extra.

El uso de EXPLAIN puede servir mucho para optimizar cada una de las consultas que realicen nuestras aplicaciones y mejorar el desempeño de la misma, ya sea escribiendo de mejor forma las consultas o agregando índices a las tablas cuando así lo requieran.

(más…)

Excepciones en MySQL

El tema de excepciones no suele ser del gusto de lor programadores dada la cantidad de condiciones a las que se someten sus aplicaciones durante su ejecución. Al momento de tratar un condición, podemos tratarla según dos enfoques:

  • Enfoque conservador: consiste en comprobar primero y luego actuar.
  • Enfoque optimista: consiste en probar primero y analizar despues.

Tomando en enfoque optimista, analizaremos el caso de un stored procedure en MySQL que ejecute una INSERT, y si el mismo dio error (por ejemplo por PK duplicada) realice un UPDATE. Como se observa, cumple con el enfoque:

  1. Intentamos ejecutar el INSERT
  2. Luego analizamos sus consecuencias y tomamos medidas correctivas

Para hacer esto veremos un poco de handlers en MySQL.
(más…)