Retroceder   Foros del Web > Programación para sitios web > Bases de Datos

Respuesta
 
Herramientas Desplegado
Antiguo 06-oct-2004, 12:46   #1 (permalink)
elmasca está en el buen camino
 
Avatar de elmasca
 
Fecha de Ingreso: enero-2004
Ubicación: Mexico
Mensajes: 104
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"
elmasca está desconectado   Responder Citando
Antiguo 07-oct-2004, 06:40   #2 (permalink)
Vice está en el buen camino
 
Avatar de Vice
 
Fecha de Ingreso: agosto-2003
Mensajes: 613
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.
Vice está desconectado   Responder Citando
Antiguo 08-oct-2004, 09:55   #3 (permalink)
elmasca está en el buen camino
 
Avatar de elmasca
 
Fecha de Ingreso: enero-2004
Ubicación: Mexico
Mensajes: 104
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"
elmasca está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 22:54.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93