02

Dic

Día de enseñanza... la query peresoza

Hoy fue un día lleno de aprendizaje, que empezó con una query, que en su momento estaba funcionando de manera adecuada, sin ningún pero, al menos yo no tenia algún problema con ella y creo que ella tampoco conmigo. Todo iba muy bien, hasta que hace unos días nos cambiaron un servidor, sobre el que estábamos trabajado, o no se exactamente que cambio hubo, lo que si se es que el desempeño del servidor se vio mermado de una manera muy notoria, ya que otra query que se encargaba de obtener unos datos del trabajador no tardaba ni medio segundo en ejecutarse, pero ahora tarda cercas de 5 minutos, lo cual es una caída en la velocidad de procesamiento enorme,  achacable a el cambio que se realizo hace poco tiempo.
Normalmente calcular el sueldo de un empleado no es mucho problema, ya que este se suele guardar de esa manera, como un valor absoluto, es decir si gano 1000 pesos, eso es lo que se guarda, pero en este caso cada fulano puede tener varios sueldos, varias prestaciones entre otras cosas. Así que para calcular el sueldo hay que sumar todas esas percepciones, lo cual en teoría no es difícil, porque quien no recuerda sus clases en la escuela en las que veías ese tipo de situaciones, nada que un simple sum y un group by no puedan resolver. El detalle esta en que ya no es la escuela y esas bases de datos de 100 o 1000 registros, sino que estamos hablando de bases de datos sacadas de entornos de operación, donde se tienen al rededor del millón y medio de tuplas. Y es ahí donde se diferencian los hombres de los niños, donde cualquier detalle en tu consulta puede hacer que los tiempos de ejecución de las mismas se vuelvan casi eternos, claro esta esto desde el punto de vista de los programadores.

Aquí hay que agregar algo, el hecho de que no estoy trabajando sobre tablas directamente, sino sobre vistas, y que no tengo ningún derecho sobre las tablas desde las que salen esas vistas, es decir que no puedo generar mis indices personalizados, dejar fuera campos que no requiero u optimizar la consulta que genera esa vista. Así que tenemos un típico caso de Caja negra, en la que no sabemos que esta pasando adentro, solo vemos los resultados, a por cierto tampoco puedo ver la query que hace la vista. Por lo que estoy amarrado de manos.

De cualquier manera, las subquerys, el operador in y los inner joins son los mejores aliados en este tipo de situaciones....

Continuara

¿Tu qué opinas?

1 comentario

pues sería cuestión de estudiarlo, saludos desde Recetas de Cocina Internacional

Escribir un comentario




Sin trackbacks

URL de TrackBack: http://mixelandia.com/MTOS/mt-tb.cgi/959