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

Ayuda acerca de MySQL

Estas en el tema de Ayuda acerca de MySQL en el foro de Bases de Datos General en Foros del Web. Hola a todos antes que nada, les escribo para ver si alguien puede explicarme un problemilla que tengo. Para empezar hice una pagina en PHP ...
  #1 (permalink)  
Antiguo 06/10/2004, 12:46
Avatar de elmasca  
Fecha de Ingreso: enero-2004
Ubicación: Mexico
Mensajes: 108
Antigüedad: 20 años, 3 meses
Puntos: 0
Pregunta Ayuda acerca de MySQL

Hola a todos antes que nada, les escribo para ver si alguien puede explicarme un problemilla que tengo.

Para empezar hice una pagina en PHP con MySQL para la busqueda de revistas electronicas, bueno pues ha surgido un problema en el servidor donde las tengo alhojadas, me dice el administrador del servidor que cuando se ejecuta una consulta esta consumiendo una cantidad de memoria muy grande al momento de generar la consulta y me ha dijo lo siguiente:

"Tu problema debe estar cuando relacionas tus tablas en las consulta SQL"

Segun lo que me explico es que cuando yo hago esto:

SELECT campo1,campo2,campon FROM journals,proveedores WHERE journals.id=proveedores.id AND campo1="loquesea" ORDER BY campo1;

Lo que aparece en Negrita segun lo que me explico se genera un producto cartesiano, esto es: en la tabla de journals tengo 18 mil registros y en proveedores 20 mil registros, entonces el producto cartesiano que el me explico es que primero se genera algo con los 18000 x 20000 registros y luego se selecciona lo que pedi siempre y cuando los id sean iguales.

Esto para mi se me hizo un poco ilogico, no se si asi trabaje MySQL o la mayoria de los manejadores de Bases de Datos cuando se hacen este tipo de consultas con SQL.

Pudiera alguien explicarme lo que me dijeron y que me afirme que eso es cierto y si eso es cierto pues ayudenme dando una solucion de como optimizar y no cargar mucho al servidor.

De ante mano muchas gracias a todos y espero su ayuda .....

__________________
"El conocimiento se debe de compartir"
  #2 (permalink)  
Antiguo 07/10/2004, 06:40
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
No estoy seguro de que eso en particular sea la causa, pero claro, todo depende del gestor en concreto, en como resuelva ese cruce.
Yo tengo más experiencia con el Informix, y te puedo decir que ahí no es como te dicen, sino que da igual que la condición de cruce la pongas en el from que en el where.
Por si quieres probarlo, puedes ponerlo así:
Código:
SELECT campo1,campo2,campon 
FROM journals join proveedores on journals.id=proveedores.id 
WHERE campo1="loquesea" 
ORDER BY campo1;
Realmente, dependiendo del número de registros que devuelva la consulta, el problema puede estar en el "order by", pues se tiene que generar una tabla temporal para almacenar el resultado y después ordenarla. Esto si que es muuuy costoso.
Un saludo.
  #3 (permalink)  
Antiguo 08/10/2004, 09:55
Avatar de elmasca  
Fecha de Ingreso: enero-2004
Ubicación: Mexico
Mensajes: 108
Antigüedad: 20 años, 3 meses
Puntos: 0
Muchas gracias Vice por tu respuesta creo que ya voy abriendo un poco mas el panorama. Yo estuve investigando y me parece que el INNER JOIN y el Producto Cartesiano son diferentes, bueno al menos eso lei en un articulo, pero si hay alguien que pueda decirme si una consulta que me devuelve alrededor de 1000 registros puede cargar mucho a un servidor si mis 2 tablas de mi base de datos son de 18 mil y 20 mil registros respectivamente?.

Gracias y espero que me sigan ayudando
__________________
"El conocimiento se debe de compartir"
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 02:17.