Category Archives: Reflexiones

MySql tunning

Uno de los primeras cosas que hay que saber antes de empezar a optimizar consultas en MySql es conocer la existencia de la cláusula EXPLAIN.

Con EXPLAIN podemos obtener el plan de ejecución de una consulta dada, como se muestra en el siguiente ejemplo:

EXPLAIN SELECT * FROM People

Resultado:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE People ALL NULL NULL NULL NULL 979

En el ejemplo anterior el plan de ejecución es un simple full scan (type = ALL) de toda la tabla People.

Vamos a ver otro ejemplo:

EXPLAIN SELECT * FROM People WHERE gender = 'Male'

Resultado:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE People ALL NULL NULL NULL NULL 979 Using where

En este caso vemos que la consulta devuelve al motor de base de datos sigue devolviendo todos los registros en un full scan.  En este caso podemos optimizar la consulta creando un índice para gender (Idx_gender). Y de esta forma el resultado de EXPLAIN será:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE People ref Idx_gender Idx_gender 22 const 489 Using where

Ahora se puede ver como ya no se requiere un full scan (type != ALL) y únicamente la filas con valores en el índice serán las seleccionadas.

Hasta ahora se puede intuir que cuando el tipo es ALL y no queremos un full scan (todas las filas), siempre se puede optimizar. Lo más sencillo es con la creación de índices que agilicen las búsquedas más frecuentes.

A continuación teneís el detalle de todos los campos que devuelve EXPLAIN:

Id: El identificador de la SELECT. Es un número secuencial.

Select_type: Tipo de la SELECT.

  • SIMPLE: SELECT simple, sin UNION o subconsultas.
  • PRIMARY: Se refiere a la consulta “más externa”; a la principal.
  • UNION: Resto de consulta/s (segunda, tercera, etc.) en una UNION.
  • DEPENDENT UNION: Resto de consulta/s (segunda, tercera, etc.) en una UNION que depende una una consulta “externa”; PRIMARY.
  • UNION RESULT: Resultado de una UNION.
  • SUBQUERY: Primera consulta de una subconsulta.
  • DEPENDENT SUBQUERY: Primera consulta de una subconsulta que depende una consulta “externa”.
  • DERIVED: Tabla derivada en una SELECT; subquery en la cláusula FROM.
  • UNCACHEABLE SUBQUERY: Subconsulta que no puede ser almacenada en caché, o re-evaluada.
  • UNCACHEABLE UNION: Resto de consulta/s (segunda, tercera, etc.) en una UNION que no puede ser almacenada en caché, o re-evaluada.

Table: tabla a la que se refiere la fila del resultado.

Type: el tipo de JOIN. Los tipos de muestran a continuación ordenados desde el mejor al peor.

  • system: la tabla únicamente tiene una fila y es una tabla del sistema. Es un caso especial del tipo const.
  • const: en la tabla coincide una única fila que el optimizador tomo como constante. También se utiliza cuando se comparan todas las partes de una clave primaria o un índice único (UNIQUE) con un valor constante.
  • Eq_ref: una fila de una tabla es leída por cada combinación de filas en una segunda tabla. Se utiliza cuando se usan todas las partes de una clave primaria o un índice único (UNIQUE).
  • ref: todas las filas que coincidan con con los valores de un índice serán leídos por cada combinación de filas de las tablas anteriores. En JOIN se utiliza cuando no se puede seleccionar una única fila en base al valor de la clave. Puede ser usada, por el optimizador, en columnas indexadas que se comparan con =, <=>.
  • fulltext: la JOIN se realiza con un índice FULLTEXT.
  • ref or null: el tipo de JOIN es como ref pero hay una búsqueda extra para campos nulos. Este tipo se suele utilizar para resolver subconsultas.
  • index_merge: se utiliza la optimización index merge.
  • unique_subquery: sustituye a ref en algunas subconsultas (del tipo SELECT clave_primaria) que utilizan IN.
  • index_subquery: sustituye a ref en algunas subconsultas (del tipo SELECT valor_columna) que utilizan IN y que no son únicas.
  • range: cuando se devuelve filas dentro de un rango.
  • index: igual que un full scan pero cuando se escanea el índice.
  • ALL: full scan. Normalmente se debe evitar.

Possible_keys: Muestra que índices puede seleccionar MySql para devolver las filas.

Key: Indica que índice va a utilizar MySql para devolver las filas.

Key_len: tamaño del índice que se va a utilizar.

Ref: columna/s o constante/s que se van a comparar con el índice.

Rows: indica el número de filas que se prevee que MySql examine. En tablas InnoDB es un valor aproximado.

Extra: información adicional sobre como MySql resolverá la consulta.

Para más información sobre el resultado de EXPLAIN por favor mirar en la página web de MySql.

Espero que os halla sido de utilidad este breve artículo de cómo utilizar EXPLAIN para optimizar vuestras consultas a bases de datos.

¡Un saludo a tod@s!

De vuelta a la senda

“Caminante, son tus huellas
el camino y nada más;
Caminante, no hay camino,
se hace camino al andar.
Al andar se hace el camino,
y al volver la vista atrás
se ve la senda que nunca
se ha de volver a pisar.
Caminante no hay camino
sino estelas en la mar.”

Antonio Machado (1875 – 1939)

Vivir sin Facebook

Qué utilidad tiene una red social: ¿Tener 1.000 amigos? ¿Colgar 500 fotos?… Seguro que alguien le encuentra la utilidad, pero yo a día de hoy no la he encontrado. Si quiero hacer microblogging utilizo mi cuenta de Twitter, en lugar de cambiar mi estado para decir tonterías o suscribirme a grupos sin sentido. Si quiero tomar una cerveza con un amig@, cojo el teléfono e intento quedar sin enviar una invitación a un evento. Si quiero colgar fotos utilizo Flickr o Picassa, o monto una cena en casa para aburrir a mis amig@s – con fotos – mientras tomamos una cervezas y nos reímos. Si quiero mantener el contacto con colegas de profesión/estudios pues que mejor que LinkedIn. Y si tengo amig@s a 2.000 kilómetros y quiero saber de ell@s pues les envío una postal, una carta o les llamo por VoIP – Skype, etc -.

Con todo esto, hace unos meses desactive todas las notificaciones que genera Facebook para tener un poco de silencio. Y hoy he dicho adiós a “mis amig@s” en Facebook y he empezado el trámite, que concluirá en 14 días, para eliminar mi cuenta/perfil de Facebook.

Otro dato curioso es que las personas con las que más me relaciono, son las personas con las que menos contacto tengo por medio de una red social.

Sumo y sigo!

Pues otro año más y el primero en nuestra casa 🙂 La verdad que este último año ha sido fantástico sobretodo en el ámbito sentimental; Ángela y Yo cada día nos queremos más y estamos viviendo una etapa genial en nuestro hogar. Dentro de lo personal, la reciente pérdida de mi abuelo materno (“Avi Siscu”) ha oscurecido lo que podría ser un año redondo. En lo académico el nuevo año que viene va a ser crucial porque si nada me lo impiede acabaré el segundo ciclo de Ingenieria Informàtica. Y en lo profesional, este año ha sido algo más aburrido; los proyectos ya no son tan motivadores y eso me cuesta llevarlo.

#include
int main (int argc, char** argv) {
    int i;
    for (i = 0; i < 32; i++) ;
    printf("%i años, y que no pare la cuenta!", i);
    return 0;
}

Google, Telefónica y la madre que los parió a todos!!!

Cada vez estoy más cansado de la política, tal y como se entiende hoy en día. Para mi la mayaría de mi mundo es binário, así que  solo caben dos posibilidad: o que los políticos no viven en este mundo, o el resto vivimos en otro mundo. Contraponiendo noticias (un ejercicio que suelo hacer) he leido que el Sr. Ministo Miguel Sebastián ha afirmado lo siguiente: “Es una opción posible que hay que discutir y barajar” a la idea de que Telefónica cobre un peaje a Google por beneficiarse de su red. WTF!!! Yo no soy un admirador de las políticas de Google (de alguno de sus productos sí), ya que creo que es una empresa que acabará por monopolizar la red o transformarla a su antojo; una vuelta de tuerca a aquella frase que dice: Si el profeta no va a la montaña, pues que la montaña venga al profeta. Y al final la montaña está yendo al “profeta”. Pero lo que me parece más absurdo todavía es que una empresa como Telefónica (más conocida como Timofónica) y que sí ejerce un verdadero monopolio de facto, venga ahora con semejante idiotez y con el respaldo del Gobierno. No olvidemos que unas cuantas primaveras atrás otro Gobierno regaló a sus colegas Telefónica y toda la red de telefonia del país. No olvidemos que este país cuenta con la peor red de ADSL de Europa y, a su vez, la más cara. No olvidemos que este país es un país donde un ladronzuelo se pudre en la cárcel mientras un “Chorizo” de guante blanco puede pasear por la calle mientras piensa en su siguiente pelotazo.

Notica en El País (hacer click) y misma noticia en El Mundo (hacer click).

Do It Yourself Agile, second edition.

Publicada la segunda versión del libro Do It Yourself Agile (Damon Poole).

El libro se distribuye gratuitamente en formato PDF y lo podéis descargar haciendo click aquí.

Linus calls Linux 'bloated and huge'

O lo que vendría a ser lo mismo, que Linux está engordando de forma constante. Y esto no sería un problema, sino fuera por que desde el principio Linux se abanderó en posición contraría a sistemas como Windows o Mac OS X que cada vez eran más grandes y consumian más recursos. Citando a un estudio de Intel, Linus explica como con cada nueva versión del kernel de Linux se pierde entorno a un 2% de rendimiento, acumulando un 12% en las últimas 10 versiones. Según Linus, parte del problema radica en si mismo al modelo de código abierto y afirma no saber como solucionar el problema. Hoy por hoy, los esfuerzos de Microsoft y Apple se centran en disminuir los tamaños de los núclos de sus respectivos y en aumentar la eficiencia de estos. Por el momento Snow Leopard ya ha adelgazado 7,5GB respecto su predecesor (Leopard). Ahora habrá que ver hacía dónde navega Linux y como lo hace.

Fuente original del artículo: The Register

Fuente en castellano del artículo: EcoDiario

Para troncharse de risa!

Lo se… me he encendido, se me han acelerado las neuronas y al agitarse mis pensamientos esto es lo que han emitido… Leo en la edición electrónica del diario Expansión una noticia titulada: “Sólo la mitad de los despachos tiene jornada intensiva en verano” y me ha entrado un ataque de risa… encima que los grandes despachos explotan a la gente con jornadas que sobrepasan las 14 horas/día, tienen los bemoles de publicar este tipo de propaganda más cercana a lo deseable que no a la realidad. Desde aquí hago un llamamiento para que los medios de comunicación no dejen en manos de sus publicistas (ups, perdón periodistas) algo tan peligroso como una estadística… es casi tan irresponsable como dejar a un pirómano con una caja de cerillas en un bosque de pinos durante el mes de Agosto. La diferencia estriba en que normalmente las consecuencias de la irresponsabilidad del periodista (ups, perdón otra vez, el publicista) no se ven y se creen!

'El País' traduce algorithm como logaritmo.

Acabo de leer en el blog La Caja Debajo de la Cama que según parece el diario El País publicó el siguiente titular: “Google crea un logaritmo para identificar a sus empleados decontentos“, más tarde lo modificó por el siguiente: “Google identificará a sus empleados descontentos con un logaritmo“. Por otro lado, la fuente de la noticia, el diario The Wall Street Journal publicó la noticia donde se puede leer que Google tiene un algoritmo para tal fin, en lugar de un logaritmo. Parece mentira que un diario de prestigio como el El País tenga entre sus filas a gente que confunda un algortimo con un logaritmo (aunque sea gente de Letras). Qué será lo próximo que confundirán… la política con la ética!

La chica de mañana…

…te estará esperando en el rincón de ayer y ya no tendrás que perseguirla. Buen viaje y gracias por todas las letras que has escrito. Desde ROTB queremos ofrecerte un pequeño homenaje con el vídeo de tú primera canción, que un día compusiste y que tantas veces hemos escuchado.

!Gracias Antonio!