toggle Cinema 21 Sep 2009

5 MySQL tips Posted by Insane in Mysql | No responses

Esta hecho, has escogido a MySQL como tu motor de base de datos, así que ¿porque no sacar ventaja de ello?. Este post te ofrece 5 tips categorizados que seguro te ayudaran a que tu motor de lo mejor que tiene.

1.Reportes al correo desde la consola.

A veces es necesario obtener el resultado de la consulta inmediatamente (no exagero) en algún archivo.Si usas un IDE como SQLYog es bastante sencillo, pero para aquellos que vivimos en la consola el siguiente tip es bastante util.No exagero, yo tengo un cron que utiliza este tip para mandar un CSV que después convierto en RSS con Yahoo Pipes XD pero bueno esa es otra historia.

SELECT COL1,COL2 from table into outfile ‘/tmp/mysqlres.dat’ fields terminated by ‘,’ lines terminated by ‘\n’;
\! echo “Sending the results from my urgent query” |
mutt -a /tmp/mysqlres.dat me@domain.com

Lo anterior generaría el resultado de la consulta en un fichero estilo CSV y en segundo paso te lo mandaría a tu correo usando mutt , puedes usar sendmail si prefieres.

El “\!”  es una abreviación del comando system y sirve para ejecutar un comando del servidor desde MySQL.

2.Tipos de Dato.

  • El optimo desempeño de tus queries dependerá de una buena estructura TABLA-SQL , el uso del  comando PROCEDURE ANALYSE al final de una instrucción SQL arrojara en el campo Optimal_fieldtype el tipo de dato optimo para los campos.
  • Evitar el uso de BIGINT ( especialmente en indices o AUTO_INCREMENT )  , usar INT en su lugar ( no es broma, hace la diferencia )
  • INT : integro tamaño normal. El rango usando signed es de 0 a  -2147483648 to 2147483647.  usando unsigned el rango es de 0 a 4294967295.
  • BIGINT : integro tamaño normal. El maximo valor usando signed es - 0 a 4294967295. 9223372036854775808 to 9223372036854775807.  usando unsigned el rango es de 0 a 18446744073709551615.Mas información aquí

3.Queries.

Joining small to medium sized “tag sets” works great
But… when you’ve got a large tag set on either “side” of the join, problems can occur with scalablity
One way to solve is via derived tables
  • Hacer JOIN con Vistas implica un esfuerzo extra para la entrega del resultset.
  • Hacer JOINS entre tipos de datos diferentes puede afectar el performance.
  • Hacer JOIN a pequeños sets de resultados funciona bien, pero cuando tienes un set considerablemente mas grande en cualquiera lado del JOIN problemas de escalabilidad pueden presentarse, la respuesta ? tablas derivadas.
  • El uso del comando EXPLAIN ( EXPLAIN [SQL]) muestra como se llevaría acabo la ejecución del sql ( tipo de SELECT , índices, tablas usadas, rows, etc… ). su correcto entendimiento lleva a

4.Status.

Respuesta lenta de parte de tu motor? alguien esta  corriendo un queryMinator ? o simplemente te interesa saber el status? ,puedes probar los siguientes comandos desde la consola de MySQL:

  • El básico es STATUS
  • SHOW PROCESSLIST muestra los procesos que están corriendo actualmente
  • SHOW FULL PROCESSLIST es similar al anterior pero arroja mas descriptivo
  • Si tienes varias tablas INNODB tal vez sea momento de checar el espacio disponible para este tipo de engine, usando SHOW INNODB STATUS

5.Varios

  • para los tipos de dato DATE, DATETIME,TIME y TIMESTAMP es recomendable usar las constantes CURRENT_DATE y CURRENT_TIMESTAMP en lugar de usar NOW() o CURDATE() ya que el resultado de estas últimas no se guardan en CACHE , es decir son ejecutadas N veces en la expresión.

Recomendados.

Performance Tuning Best Practices for MySQL

Top 15 Ways to Kill MySQL Performance

http://www.mysqlperformanceblog.com/

http://www.scribd.com/doc/2565263/The-top-20-design-tips-for-MySQL-Enterprise-data-architects

http://www.baluart.net/articulo/10-tips-para-optimizar-consultas-mysql

  • Share/Bookmark

Promote this post

Would you like to add this post to your bookmarks? Come on, do not miss any updates and stay tuned.
Please share with us!

This entry no have comments but you can be first .

Leave a Reply ( Guest )

(*)

(will not be published) (*)