Demora en Consulta Sql

Demora en Consulta Sql

de Gabriel Bautista -
Número de respuestas: 10

Estimados, estamos realizando algunas consultas sql para armar reportes personalizados que luego se incluirán en distintos roles.

Armamos esta consulta pero demora años en guardarse y luego siglos en armar el reporte.. que podrá ser?

SELECT
lastname as ‘Apellido’,
firstname as ‘Nombre’,
cur.shortname as ‘Materia’ ,
##ccat.name as ‘Carrera’,

DATE_FORMAT(FROM_UNIXTIME(MAX(l.time)),'%d-%m-20%y') as ‘Ultimo_acceso’

FROM prefix_user AS user
left JOIN prefix_log AS l ON user.id=l.userid
INNER JOIN prefix_role_assignments AS role ON user.id = role.userid
INNER JOIN prefix_context AS c ON c.id = role.contextid
INNER JOIN prefix_course AS cur ON cur.id=c.instanceid
##INNER JOIN prefix_course_categories AS ccat ON ccat.id = cur.category


LEFT JOIN prefix_user_lastaccess AS ul ON ul.userid = user.id

WHERE role.roleid=3

 

GROUP BY cur.id

Promedio de valoraciones: -
En respuesta a Gabriel Bautista

Re: Demora en Consulta Sql

de Sandra Piedrabuena -

Hola Gabriel.

Te cuento que corrí el script en una DB con más de cincuenta mil usuarios y veintisiete mil cursos, tardó quince segundos.

Luego alteré el orden de lectura de las tablas, para que leyera primero la de log.:

SELECT lastname AS ‘Apellido’, firstname AS ‘Nombre’, cur.shortname AS ‘Materia’, DATE_FORMAT( FROM_UNIXTIME( MAX( l.time ) ) , '%d-%m-20%y' ) AS ‘Ultimo_acceso’
FROM mdl_log AS l
LEFT JOIN mdl_user AS user ON user.id = l.userid
INNER JOIN mdl_role_assignments AS role ON user.id = role.userid
INNER JOIN mdl_context AS c ON c.id = role.contextid
INNER JOIN mdl_course AS cur ON cur.id = c.instanceid
LEFT JOIN mdl_user_lastaccess AS ul ON ul.userid = user.id
WHERE role.roleid =3
GROUP BY cur.id

Resolvió la consulta en ocho segundos. Y no trajo los usuarios que no ingresaron a ningun curso.

Saludos

En respuesta a Sandra Piedrabuena

Re: Demora en Consulta Sql

de Eder dos Santos -

Cómo estás, San?

Veo tu post y me resulta muy interesante. Permíteme consultarte algo sobre el SGBD, aunque escapa al tema del foro: luego de cambiar el orden de los joins, volviste a ejecutar la primera consulta que hiciste? Volvió a darte en 15 segundos?

Te pregunto porque me interesa esto, tengo entendido que (por lo menos teóricamente) el optimizador de la mayoría de los SGBD ordena los joins para encontrar la forma canónica de la consulta SQL...

En este caso, me podrías decir que SGBD usas? Es un dato interesante para mí saber que hay optimizadores que no requieren la declaración de STRAIGHT JOIN para modificar el orden de los joins del optimizador de consulta.

Desde ya, ¡gracias!

Eder

En respuesta a Eder dos Santos

Re: Demora en Consulta Sql

de Sandra Piedrabuena -

Hola Eder.

Todo bien (brrr, está frio) Te comento que usamos mysql; tal como viene, no agrupamos ni tocamos los índice.

Al colocar la tabla de usuarios en primer lugar, vuelve a demorar quince segundos.

Un saludo.

En respuesta a Sandra Piedrabuena

Re: Demora en Consulta Sql

de Eder dos Santos -

Hola, San! Ni te imaginas por acá como está frio! Y bueno, nos llegó la ola polar!

Gracias por la respuesta! Sería mucho pedirte que me mandes por correo cuando tengas un tiempito el resultado del EXPLAIN de ambas consultas? Me produce mucha rareza, porque hice pruebas en distintas versiones de MySQL y es como te comentaba, el optimizador de consultas reordena los joins por cuenta propia, salvo que utilice straight joins...

Muchas gracias!

Recibe un saludo cordial

Eder

En respuesta a Eder dos Santos

Re: Demora en Consulta Sql

de Sandra Piedrabuena -

Hola Eder.

Te acerco lo que me parece quieres. Saludos.

En respuesta a Sandra Piedrabuena

Re: Demora en Consulta Sql

de Eder dos Santos -

Buen día, San.

Muchisimas gracias, era exactamente eso lo que deseaba ver. Y a decir verdad, me produce un cierto espanto como el optimizador trata la consulta en los distintos casos, en función del orden de tablas que usa para las reuniones. En principio, tengo entendido que debería estimar algunas cosas (sobretodo el numero de filas y posibles indices de cada tabla) y producir el mismo orden de reunión, y no funcionar de formas distintas... Cosas de MySQL, para tener en cuenta!

¡Que sigas bien!

Eder

En respuesta a Sandra Piedrabuena

Re: Demora en Consulta Sql

de Gabriel Bautista -

Perdón muchachos en la respuesta, pero hemos estado algo complicados.

San te comento que copie tal cual como lo pusiste en tu respuesta y sigue demorando horrores en armar la consulta; incluso algunas veces termina en timeout.

Realmente me tiene algo desconcertado, cualquier consulto que hago demora mucho en armar el informe.

Vere de seguir investigando un poco más, gracias por todos los aportes.

En respuesta a Gabriel Bautista

Re: Demora en Consulta Sql

de Eder dos Santos -

Gabriel,

A través de que herramienta ejecutas la consulta? De algún modo de moodle? Directamente a la bd através de algun cliente?

Saludos

En respuesta a Eder dos Santos

Re: Demora en Consulta Sql

de Gabriel Bautista -

Hola, estoy utilizando los reportes personalizados, ya que despues necesito dar permisos a esos reportes a distintos roles.

Que podrá ser?.
Saludos.

En respuesta a Gabriel Bautista

Re: Demora en Consulta Sql

de Eder dos Santos -

Gabriel,

Te recomendaría utilizar, en lo posible, un cliente directo a la BD (un query browser o el propio phpmyadmin), para chequear si experimentas los mismos inconvenientes de performance.

Saludos