Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Problema Procesamiento MySQL

Estas en el tema de Problema Procesamiento MySQL en el foro de Mysql en Foros del Web. Verán, tengo el siguiente problema: Cree un procedimiento almacenado y cuando lo tenia en desarrollo funcionaba bien, al pasar a produccion al inicio funciono bien. ...
  #1 (permalink)  
Antiguo 16/02/2015, 10:26
 
Fecha de Ingreso: febrero-2015
Mensajes: 3
Antigüedad: 9 años, 2 meses
Puntos: 0
Pregunta Problema Procesamiento MySQL

Verán, tengo el siguiente problema:
Cree un procedimiento almacenado y cuando lo tenia en desarrollo funcionaba bien, al pasar a produccion al inicio funciono bien. Pero cuando la base empezo a tener cierta carga, 62 registros que no es mucho, se queda procesando y jamas bota resultado, y no tengo un codigo de error.
Intente mejorarlo con una vista pero el resultado es el mismo.
El procedimiento y la vista solo hacen un select a unas 8 tablas diferentes. Espero consejos... Gracias
  #2 (permalink)  
Antiguo 16/02/2015, 10:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema Procesamiento MySQL

El primer consejo es que postees el código del SP. Si no vemos como es, difícilmente podemos saber por qué falla.
Por otro lado, es altamente probable que tengas productos cartesiano en alguna forma, o el orden de tablas y las condiciones no son las adecuadas.
Hay que ver el código real.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 16/02/2015, 11:30
 
Fecha de Ingreso: febrero-2015
Mensajes: 3
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema Procesamiento MySQL

el codigo del procedure es el siguiente:
donde el sf_idexpediente es un stored function que devuelve la ID de la tabla expediente.
Código MySQL:
Ver original
  1. CREATE PROCEDURE `sp_detalle_expediente`(
  2. in c1 varchar(5),
  3. in c2 varchar(4),
  4. in c3 varchar(3),
  5. in c4 varchar(4),
  6. in c5 varchar(2),
  7. in c6 varchar(2),
  8. in c7 varchar(2) )
  9. declare pkexpe int;
  10. set pkexpe = (select sf_idexpediente(c1, c2, c3,c4,c5,c6,c7));
  11. select expediente.cod1,expediente.cod2,expediente.cod3,expediente.cod4,expediente.cod5,expediente.cod6,
  12. expediente.cod7,expediente.juez, expediente.finicio, expediente.secretario, juzgado.nombre as juzgado,
  13. estado.nombre as estado,especialidad.nombre as especialidad,distrito_expe.distrito_expe,otros.otros,
  14. proceso.proceso,cuaderno.cuaderno,judicatura.judicatura,materia.materia, expediente.sumilla,
  15. expediente.idexpediente
  16. from expediente, estado, juzgado, cuaderno, judicatura, proceso, distrito_expe, otros,
  17. especialidad, materia
  18. expediente.idexpediente like pkexpe
  19. and juzgado.idjuzgado like expediente.idjuzgado
  20. and  estado.idestado like expediente.idestado
  21. and cuaderno.idcuaderno like expediente.idcuaderno
  22. and judicatura.idjudicatura like expediente.idjudicatura
  23. and proceso.idproceso like expediente.idproceso
  24. and distrito_expe.iddistrito_expe like expediente.iddistrito
  25. and  otros.idotros like expediente.idotros
  26. and especialidad.idespecialidad like expediente.idespecialidad
  27. and materia.idmateria like expediente.idmateria; END ;

Última edición por gnzsoloyo; 16/02/2015 a las 14:08
  #4 (permalink)  
Antiguo 16/02/2015, 15:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema Procesamiento MySQL

Hola lnerol:

Tienes varios HORRORES (no errores) en tu consulta.

En primer lugar, NUNCA, ABSOLUTAMENTE NUNCA, utilices comparaciones de este tipo:

Código MySQL:
Ver original
  1. ...
  2. juzgado.idjuzgado like expediente.idjuzgado
  3. ...
El operador LIKE sirve para comparar patrones de cadenas, en tu caso simplemente tienes que hacer una IGUALACIÓN:

Código MySQL:
Ver original
  1. ...
  2. juzgado.idjuzgado = expediente.idjuzgado
  3. ...

Dos, en lugar de listar las tablas que intervienen en el FROM y hacer uniones implícitas, UTILIZA SIEMPRE LOS JOIN'S (INNER, LEFT O RIGTH según sea el caso):

Código MySQL:
Ver original
  1. El lugar de esto:
  2. ...
  3. FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo
  4. ...
  5.  
  6. Haz esto:
  7. ...
  8. FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
  9. ...

Tres, qué es "sf_idexpediente"... puedo suponer que se trata de otro SP, pero no entiendo muy bien qué haces aquí:

Código:
set pkexpe = (select sf_idexpediente(c1, c2, c3,c4,c5,c6,c7));
Cuatro, verifica si en realidad necesitas de todas las tablas que estás colocando... en el SELECT no veo que hagas referencia a todas las tablas, por lo tanto, no estoy seguro de que en realidad las necesites...

Entre más simple sea la consulta, será más probable que tenga un mejor desempeño.

Saludos
Leo.
  #5 (permalink)  
Antiguo 19/02/2015, 07:54
 
Fecha de Ingreso: febrero-2015
Mensajes: 3
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Problema Procesamiento MySQL

Muchas gracias leonardo_josue, solucione mi problema con tus sugerencias.

Etiquetas: procesamiento, registro, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:20.