Resumiendo estos son los puntos, puedes ver más información en el post original :)
1. Optimiza tus peticiones para la caché.
2. Usa EXPLAIN en tus consultas SELECT
3. Usa LIMIT 1 Cuando sólo quieras una única fila.
4. Indexa los campos de Búsqueda
5. Indexa, y utiliza el mismo tipo de columna para los Join
6. No uses ORDER BY RAND()
7. Evita SELECT *
8. Ten casi siempre un campo identificativo
9. Usa ENUM antes que VARCHAR
10. Obtén sugerencias con PROCEDURE ANALYSE()
11. Usa NOT NULL si puedes
12. Declaraciones preparadas
13. Consultas fuera de buffer
14. Almacena las direcciones IP como UNSIGNED INT
15. Las tablas de tamaño fijo (Estáticas) son más rápidas
16. Particionado Vertical
17. Divide las consultas DELETE o INSERT grandes
18. Las columnas pequeñas son más rápidas
19. Escoge el motor de almacenamiento adecuado
20. Usa un Mapeador de objetos relacionales
21. Ten cuidado con las conexiones persistentes
¿Conocéis más trucos para optimizar una base de datos MySQL?
En http://www.mysqlperformanceblog.com/ se pueden encontrar muchísimos artículos interesantes.
Lo primero que yo hago siempre es activar el log de queries lentas (slow queries). Si tienes Percona MySQL instalado (una variante compatible con MySQL que da muchas funcionalidades), puedes activar las consultas lentas que vayan por debajo del segundo de ejecución.
Desde luego lo esencial es instalar las percona tools (no hace falta tener Percona instalado) y hacerte un cron con pt-query-digest que te permite generar un informe muy interesante y explicativo de donde se está yendo el tiempo en las consultas
En cuanto al punto número 20... haría una lista similar para la gente que utilice ORMs... muchas veces no se usan bien (o no son necesarios según el proyecto) y nos juegan malas pasadas.
Denormaliza. No siempre innodb es lo óptimo y tener FK débiles puede ser muy bueno ;)
Yo odiaba MyISAM, que no es atómico, relacional bla bla bla (ACID)...para luego darme cuenta que en casi todas las APP que desarrollaba esto no era realmente importante. MyISAM escribe y lee generalmente muchísimo más rápido ;)
1. Optimiza tus peticiones para la caché.
2. Usa EXPLAIN en tus consultas SELECT
3. Usa LIMIT 1 Cuando sólo quieras una única fila.
4. Indexa los campos de Búsqueda
5. Indexa, y utiliza el mismo tipo de columna para los Join
6. No uses ORDER BY RAND()
7. Evita SELECT *
8. Ten casi siempre un campo identificativo
9. Usa ENUM antes que VARCHAR
10. Obtén sugerencias con PROCEDURE ANALYSE()
11. Usa NOT NULL si puedes
12. Declaraciones preparadas
13. Consultas fuera de buffer
14. Almacena las direcciones IP como UNSIGNED INT
15. Las tablas de tamaño fijo (Estáticas) son más rápidas
16. Particionado Vertical
17. Divide las consultas DELETE o INSERT grandes
18. Las columnas pequeñas son más rápidas
19. Escoge el motor de almacenamiento adecuado
20. Usa un Mapeador de objetos relacionales
21. Ten cuidado con las conexiones persistentes
¿Conocéis más trucos para optimizar una base de datos MySQL?
20/05/2014 12:35
Lo primero que yo hago siempre es activar el log de queries lentas (slow queries). Si tienes Percona MySQL instalado (una variante compatible con MySQL que da muchas funcionalidades), puedes activar las consultas lentas que vayan por debajo del segundo de ejecución.
Desde luego lo esencial es instalar las percona tools (no hace falta tener Percona instalado) y hacerte un cron con pt-query-digest que te permite generar un informe muy interesante y explicativo de donde se está yendo el tiempo en las consultas
20/05/2014 12:33
Interesantes consejos...
En cuanto al punto número 20... haría una lista similar para la gente que utilice ORMs... muchas veces no se usan bien (o no son necesarios según el proyecto) y nos juegan malas pasadas.
20/05/2014 13:04
Yo odiaba MyISAM, que no es atómico, relacional bla bla bla (ACID)...para luego darme cuenta que en casi todas las APP que desarrollaba esto no era realmente importante. MyISAM escribe y lee generalmente muchísimo más rápido ;)
20/05/2014 12:02