20 recursos MySQL

Una buena lista de aplicaciones, enlaces, recursos, tutoriales sobre MySQL que nos pueden ayudar a trabajar con esta base de datos.

Herramientas de diseño y administración

  • MyDB Studio: aplicación para administracion de MySQL con alguna utilidad para diseño.
  • SQLYog: excelente GUI para diseño y administración de bases de datos MySQL.
  • WWW SQL Designer: diseñador Ajax, tiene muchas características que normalmente solo están disponibles en aplicaciones offline.
  • OpenOffice.org Base: aunque es inusual, realmente tiene un buen soporte para trabajar con MySQL.
  • AutoMySQLBackup: para la creación de scripts para realizar backups.
  • PHPMyAdmin: el más famoso de los administradores de MySQL vía web.

Herramientas de seguridad

  • SQLIer: Herramienta para SQL Injection que indicando una URL, intenta hacer todo lo posible para realizar SQL Injection.
  • SQLMap: Otra utilidad para SQL Injection que admite MySQL, PostgreSQL y MSSQL.
  • Absinthe: utilidad disponible para Linux y Windows que intenta forzar tu servidor con ataques SQL injection.
  • SQID: SQL Injection mediante línea de comandos creado con Ruby.

Optimización

Conocimientos

20 Indispensible MySQL Resources

Vía / dzone

MySQL Index Analyzer: analiza los índices de MySQL

MySQL Index Analyzer es una sencilla aplicación creada en Java que nos analiza los índices de una base de datos en MySQL. Comprueba qué índices no son útiles desde la perspectiva de la BD.
mia.png
Por ejemplo, para todas índices de las tablas que cubre los campos que son primary key, en este caso es útil porque este índice no se usará nunca por el optimizador.
A parte de un informe, nos devuelve scripts para resolver los problemas.

MySQL Index Analyzer

Consejos MySQL

El problema que tenemos muchos a la hora de desarrollar es no profundizar en las características que nos ofrece una herramienta. En este caso, solemos realizar una serie de consultas en MySQL que se podrían optimizar para que fuera todo más rápido.

Búsqueda de palabras

/* Muy rápida */
SELECT * FROM tabla WHERE MATCH (`campo`) AGAINST ('palabra')
/* Rápida */
SELECT * FROM tabla WHERE MATCH (`campo`) AGAINST ('+palabra' IN BOOLEAN MODE)
/* Lentas */
SELECT * FROM tabla WHERE RLIKE '(^| +)palabra($| +)'
/* o */
SELECT * FROM tabla WHERE
RLIKE '([[:space:]]|[[:<:]])palabra([[:space:]]|[[:>:]])'

Búsquedas contenidas

/* Muy rápida */
SELECT * FROM tabla WHERE MATCH (`campo`) AGAINST ('palabra*' IN BOOLEAN MODE)
/* Rápida */
SELECT * FROM tabla WHERE FIELD LIKE 'palabra%'
/* Lentas */
SELECT * FROM tabla WHERE MATCH (`campo`) AGAINST ('*palabra*' IN BOOLEAN MODE)
/* o */
SELECT * FROM tabla WHERE campo LIKE '%palabra%'

Número de registros

/* Muy rápida */
SELECT SQL_CALC_FOUND_ROWS * FROM tabla WHERE condición LIMIT 0, 10
SELECT FOUND_ROWS()
/* Rápido */
SELECT * FROM tabla WHERE condición LIMIT 0, 10
SELECT COUNT(clave) FROM TABLE WHERE condición

Lo más lento es recuperar los registros y luego un script (PHP por ejemplo) contarlos.

PHP Mysql tips

Gracias diarioTHC por el enlace

| |

Sphinx: buscador de texto open source

sphinx.pngSphinx (SQL Phrase Index) es un motor que permite buscar texto. Normalmente es un motor de búsqueda independiente, que provee de forma rápida y eficiente resultados relevantes a otras aplicaciones. Está diseñado para ser integrado con MySQL y lenguajes de programación (actualmente PHP). Los datos se pueden recuperar mediante conexión directa a MySQL o mediante XMLs.

Dispone de cuatro utilidades: indexer para crear índeces de texto, search para buscar desde la línea de comandos, searchd es un demonio que busca en los textos desde aplicaciones externas y sphinxapi un API para lenguajes de programación (PHP).

Entre las características que ofrece nos encontramos con lo siguiente:

  • Alta velocidad de indexación (+10Mb/s)
  • Alta velocidad de búsqueda (0.1 s. en 2-4 Gb de texto)
  • Alta escalabilidad
  • Soporte para búsquedas distribuidas
  • Soporte para MySQL nativo (admite tablas MyISAM y InnoDB)
  • Búsqueda de frases
  • Stemming de inglés y ruso
  • Y mucho más

Sphinx

Vía / MySQL Performance Blog

MySQLToolKit: utilidades MySQL para la línea de comandos

MySQLToolKit es una serie de utilidades de línea de comandos esenciales para MySQL. Totalmente independientes, no se necesita ninguna aplicación externa, ni ser instalados, solo es necesario ejecutarlos.

Entre las utilidades que ofrece, nos encontramos con:

  • Table Checksum: comprueba si existen los mismos datos en dos tablas. La única forma de comprobar si las tablas esclavas están sincronizadas.
  • Table Sync: ofrece dos algoritmos que aseguran sincronización entre tablas aunque no estén en el mismo servidor.
  • Query Profiler: analiza querys normales, en batch, aplicaciones externas y comandos. Recopila datos de diversas fuentes para mostrar un informe de resultados con sentido.
  • Archiver: almacena filas de una tabla en otra tabla o en un fihero.
  • Deadlock Logger: recupera datos del último deadlock InnoDB y lo almacena en un fichero o en una tabla.
  • Duplicate Key Checker: encuentra índices o claves foráneas que estén total o parcialmente duplicadas.
  • Show Grants: te ayuda a extraer, comparar, cambiar, sincronizar y llevar una control de versiones de los privilegios de los usuarios.
  • Slave Restart: monitoriza la replicación de los esclavos por si ha habido error y si es así los reinicia.

MySQLToolKit

Vía / Xaprb

MONyog: monitor de MySQL

MONyog es un monitor web de MySQL, que nos permite identificar problemas MySQL de forma rápida y sencilla. Se trata de una aplicación que monitoriza el servidor MySQL y lo muestra con servidor web independiente que nos muestra muchos datos de nuestra, localizado en el puerto 9999, sin poder seleccionar el que queramos.
monyog.png
Entre las opciones que nos ofrece encontramos información general de la BD, historial de conexiones, caché Innodb, logs Innodb, caché de querys, tablas y threats, querys lentas, tráfico de red y muchas cosas más.
MONyog

|

HeidiSQL: cliente para MySQL

heidisql.pngHeidiSQL es un cliente open source para MySQL que permite manejar y visualizar las bases de datos y las tablas de MySQL. Algo parecido a lo que ya hacen MySQL Query Browser o SQLYog.

heidisql2.png

Entre las características que nos ofrece encontramos lo siguiente:

  • Generar informes SQL
  • Sincronizar tablas entre dos bases de datos
  • Manjar privilegios de usuarios
  • Importar ficheros de texto
  • Exportar los datos de una tabla en formato CSV, HTML o XML
  • Visualizar y editar los datos de una tabla
  • Insercion de ficheros ascii o binarios
  • Editor SQL con sintaxis resaltada y autocompletado
  • Monitorizar y eliminar procesos cliente

Además existe una versión portable

HeidiSQL

Devolver XMLs mediante MySQL

Existen bastantes ocasiones en los que el envío de información mediante XML es necesario, por ejemplo web services. Normalmente los datos que necesitamos enviar están almacenados en la base de datos, si necesitamos enviar esos datos en formato XML, normalmente solemos recuperar los datos en formato normal y luego transformarlo a XML mediante nuestro lenguaje de programación (por ejemplo PHP).
En este caso, mediante MySQL y los procedimientos almacenados, podemos crear una consulta que devuelva cada registro en formato XML, aunque habrá que incluirlo entre una etiqueta padre y añadirlo la cabecera XML (<?xml version …).
Las funciones que nos ofrece el autor son tres: xml_escape para remplazar caracteres no permitidos en un XML, xml_attr para crear un atributo XML y xml_tag para crear una etiqueta XML.
XML output from MySql

MySQL Proxy: para optimizar tu base de datos

mysqlproxy.pngMySQL Proxy es una aplicación, aún en fase inicial, que se sitúa entre tu aplicación y MySQL. Permite monitorear, analizar y transformar las comunicaciones. Su flexibilidad permite un número ilimitado de usuarios, a parte de incluir balanceo de carga, failover, análisis de querys, filtrado y modificación de querys y mucho más.
Disponible para Linux, Mac OSX, FreeBSD, IBM AIX y Sun Solaris, mientras que en Windows aún no está disponible por haber problemas con la librería libevent, pero estará disponible en breve.
MySQL Proxy

|

Recursos para crear paginación

A la hora de crear paginación en los resultados que devuelve una búsqueda en nuestra aplicación hay que tener varias cosas en cuenta. Sobre todo cuando queremos mostrar los resultados totales. Para saber cuántos resultados se han obtenido, debemos hacer una consulta del tipo:

select count(1) from tabla

Esto suele ser lo más eficiente, ya que la otra opción es hacer la consulta sin más y luego contar el número de registros (a mí me parece una locura, pero lo he visto en varios sitios).

Si ya hemos calculado el número de registros, ahora podemos obtener únicamente un rango de registros ya sea con LIMIT en MySQL o haciendo uso del ROWNUM en Oracle.

¿Presenta algún problema calcular inicialmente el número de registros?, pues sí, si la consulta es pesada, por ejemplo por su complejidad, se deberá realizar dos veces, la primera para calcular el número de registros y la segunda para obtener los datos, por lo que perdemos un tiempo precioso.

Lo lógico sería hacer un estudio de cuántos registros se pueden obtener de la consulta, si son relativamente pocos, quizás compense obtener todos y no tener que hacer dos consultas. También puede ser interesante conocer hasta que página suele acceder el usuario, no creo que más de 5 a 10 páginas, si el usuario llega a ese número de páginas consultadas y no encuentra nada, o lo da por imposible o refina la búsqueda.

Lo mejor sería que no aparecieran el número de registros totales encontrados, aunque esto a veces no es posible ya que las especificaciones del cliente lo obligan, entre otras cosas porque ese dato puede llegar a dar cierto prestigio sobre la calidad del buscador.

Tampoco olvidar que las bases de datos no recuperan todos los registros de una sola vez, sino que los va recuperando según se van solicitando, al menos así lo hacen bases de datos como Oracle.

De todas formas, para aquellos que necesiten realizar paginación en sus aplicaciones web, os pasamos una serie de tutoriales que esperamos sean de utilidad: