Dicho y hecho, hemos agregado el nuevo servicio de reporte sobre las consultas SQL de tus bases de datos.
Antes de entrar en detalle quiero se帽alar que desde el equipo de Desarrollo estamos profundamente indignados con la cantidad de respuesta que tuvo el post anterior respecto de los 3 comentarios que nos dejaron en el prelanzamiento de estos nuevos reportes. Qu茅 pas贸 con los tecn贸filos ?
En fin.
Los molesto con que ingresen a su GridPanel y miren la secci贸n MySQL -> Registro de Consultas. Se van a encontrar con un listado d铆a a d铆a, base por base, de todas las consultas SQL que sus sitios hayan ejecutado que hayan superado 1 segundo de ejecuci贸n. Pueden ver varios datos asociados a cada consulta, realizar b煤squedas por cualquier cadena de texto y lo que es mejor la informaci贸n se actualiza una vez por minuto, no luego de varias horas.
Cada segundo que ven ah铆 es un segundo que sus usuarios tuvieron que esperar as铆 que es una excelente herramienta para optimizar un sitio!
Una guia muy r谩pida de como optimizar una consulta SQL
Imag铆nense una base de datos como una estanter铆a llena de libros. Cada libro de la estanter铆a es una tabla.
Cada p谩gina del libro es un registro (a fines pr谩cticos, sepan que esto es solo una analog铆a)
Si les pido que me busquen en qu茅 p谩gina empieza el cap铆tulo 2 del libro una forma es abrirlo, y mirar p谩gina por p谩gina, una por una, hasta encontrar una p谩gina que diga “CAPITULO 2″. Me van a decir, el capitulo 2 empieza en la p谩gina 40.
Ahora bien, lo m谩s probable es que el libro tenga un 铆ndice al principio y mirando solamente el 铆ndice y sin mirar el resto del libro me puedan decir tambi茅n que el capitulo 2, efectivamente empieza en la p谩gina 40.
Cuando trabajamos con bases de datos el concepto es exactamente el mismo. Si guardamos muchos registros (p谩ginas), tengamos presente que cuando le pedimos al motor de MySQL que nos traiga un resultado va a tener que leer p谩gina por p谩gina, la tabla (libro) entero hasta encontrar todo lo que le pedimos.
Pero si armamos un 铆ndice, los resultados van a ser mucho m谩s r谩pidos!
La gran mayor铆a de las consultas que van a encontrar en el Slow Query Log de MySQL tienen que ver con esto. No siempre, pero dir铆a que un 95% de los casos. Y muchas veces un peque帽o indice en una columna de datos determinada puede generar enormes diferencias. Hoy mismo trabajamos con un cliente para reducir una consulta de 180 segundos a 0.01 segundos con 2 铆ndices!
Entonces lo que tenemos que hacer es:
1. Identificar las consultas lentas (esto lo hacemos por vos 
2. Ejecutar la consulta anteponiendo la cl谩usula EXPLAIN.
Por ejemplo si la consulta es “SELECT * FROM usuarios WHERE cumpleanos = ’2008-25-10′”
Ejecutamos lo siguiente: “EXPLAIN SELECT * FROM usuarios WHERE cumpleanos = ’2008-25-10′”
Nos va a dar algo parecido a:
+–+————+———-+——+—————+——-+——–+——-+——-+————-+
| id | select_type | table 聽 聽聽聽聽 | type聽 | possible_keys | key 聽 聽聽 | key_len | ref 聽 聽聽 | rows 聽聽 | Extra聽聽聽 聽 聽 聽聽 聽 |
+–+————+———-+——+—————+——-+——–+——-+——-+————-+
|聽 1 | SIMPLE聽聽聽聽聽 | usuarios聽聽 | ALL聽 | NULL聽聽聽聽 聽 聽 聽 聽聽聽 | NULL |聽聽聽 NULL | NULL | 19063 | Using where |
+–+————+———-+——+—————+——-+——–+——-+——-+————-+
3. Crear los 铆ndices adecuados (imaginarse: que columna tendr铆a que leer para filtrar lo que me piden?)
y con un simple “ALTER TABLE usuarios ADD INDEX indice1 (cumpleanos);” la cosa cambia:
+–+————+———-+——+—————+———-+———+——-+—-+————-+
| id | select_type | table 聽 聽聽聽聽 | type聽 | possible_keys | key 聽 聽聽聽聽聽聽聽聽 | key_len | ref 聽 聽 聽聽 | rows 聽聽 | Extra聽聽聽聽 聽 |
+–+————+———-+——+—————+———-+———+——-+—-+————-+
|聽 1 | SIMPLE聽聽聽聽聽 | usuarios聽聽 | ref聽聽聽聽 | indice1聽聽聽聽聽聽聽聽聽聽聽聽 | indice1 聽 聽聽 |聽聽聽 聽 聽聽聽聽 8 聽 | const 聽聽 | 1 聽 聽 | Using where |
+–+————+———-+——+—————+———-+———+——-+—-+————-+
Si se fijan van a ver que la cantidad de registros (rows/p谩ginas) analizadas pas贸 de 19063 (la cantidad de usuarios que tengo a 1. Mucho, pero mucho m谩s r谩pido.
4. Probar nuevamente con un EXPLAIN. Si los resultados no son satisfactorio pueden eliminar el 铆ndice mediante el comanto ALTER TABLE usuarios DROP INDEX indice1.
Con estos pasos van a lograr que sus sitios funcionen mucho m谩s r谩pido. Y si sus registros de consultas lentas est谩n vac铆os, quiere decir que est谩n haciendo las cosas bien
(o que las tablas son muy chicas!)
Hay muchas herramientas para este tipo de tareas como el esta, esta o esta otra.
Eso es todo!
pd. Estamos trabajando ahora en una actualizaci贸n general de todas las instalaciones de PHP en versi贸n 4 y versi贸n 5 en todos nuestros servidores. Vamos a incluir nuevos m贸dulos, l铆mites de memoria y upload m谩s amplios y la posibilidad de elegir entre varias configuraciones php.ini diferentes. Est茅n atentos para dentro de poco