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

Respuesta
 
Herramientas Desplegado
Antiguo 11-jul-2007, 04:04   #1 (permalink)
sinma ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2007
Mensajes: 41
Pregunta Qué consume más recuros?

Hola a tod@s,

¿Qué consume más recursos en la base de datos, realizar una consulta con un join de tres tablas, o realizar una consulta a una tabla y posteriormente realizar una acceso a las otras dos tablas por cada uno de los resultados de dicha consulta?

Muchas gracias.
sinma está desconectado   Responder Citando
Antiguo 12-jul-2007, 04:02   #2 (permalink)
MACGREGOR está en el buen camino
 
Avatar de MACGREGOR
 
Fecha de Ingreso: enero-2005
Mensajes: 89
Re: Qué consume más recuros?

El coste en consumo de recursos dependerá del SGBD (sistema gestor de Base de Datos) que utilices, pero en principio aproximadamente haces lo mismo así que consumirás también aproximadamente lo mismo.

Lo que te aconsejo es que hagas joins de las tablas y si el SGBD es bueno optimizará todo lo que pueda tu consulta.

De todas formas debes pensar que por muy bueno que sea, debes tener en cuenta que no es lo mismo hacer una join tabla_A.id=tabla_B.id que tabla_B.id=tabla_A.id
Dependiendo del tamaño de tus tablas aunque parezca lo mismo una opción puede ser muchisimo más costosa que la otra.

Con el siguiente ejemplo creo que quedará muy claro.

Tabla_A tiene 50 registros.
Tabla_B tiene 50.000 registros.

Una join Tabla_A.id=Tabla_B.id realizará 50 vueltas a un bucle y en cada vuelta recorrerá 50.000 registros de la tabla B.

Una join Tabla_B.id=Tabla_A.id realizará 50.000 vueltas a un bucle para tratar los 50 registros de la tabla A.

Aparentemente es lo mismo, pero sistemas como Oracle trabajan con paginación de memória (una especie de gestión de caché para la DB), el primer caso lo haría muchisimo más rápido ya que haría 1 acceso a datos para los 50 registros de la tabla_A que mantendría en 1 página de memoria y N accesos para recorrer la tabla_B.

Como la tabla_B la iria cargando en páginas de memoria de forma consecutiva y las leería enteras el coste sería mínimo, ya que cuando se produzcan fallos de página no implicarán acceder a disco para cargar datos a los que ya se había accedido.

Accediendo primero a la tabla grande el coste sería mucho mayor si el sistema está un poco cargado y se producen fallos de página. (volvería a leer de disco los 50 registros de la tabla pequeña en cada fallo).

Espero haberme explicado mínimamente.

Un saludo.
MACGREGOR está desconectado   Responder Citando
Antiguo 12-jul-2007, 09:28   #3 (permalink)
sinma ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2007
Mensajes: 41
De acuerdo Re: Qué consume más recuros?

Gracias por tu respuesta. Ha sido clara, y con un buen ejemplo.
sinma está desconectado   Responder Citando
Antiguo 12-jul-2007, 09:55   #4 (permalink)
(Desactivado)
Developer9 Developer9
 
Avatar de Developer9
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.202
Enviar un mensaje por MSN a Developer9
Re: Qué consume más recuros?

Yo creo que un join y peor si le pones un order by consume más recuersos
Developer9 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 14:04.


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