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

[SOLUCIONADO] Buscar un valor en dos tablas (como es mas eficiente)

Estas en el tema de Buscar un valor en dos tablas (como es mas eficiente) en el foro de Mysql en Foros del Web. Buenas noches, mi tema es el siguiente tengo una tabla "usuarios" asi: idusuario|Nombre 1 | Juan 2 | Pedro 3 | Luis 4 | Marco ...
  #1 (permalink)  
Antiguo 30/05/2019, 20:50
 
Fecha de Ingreso: marzo-2004
Mensajes: 187
Antigüedad: 15 años, 2 meses
Puntos: 1
Buscar un valor en dos tablas (como es mas eficiente)

Buenas noches, mi tema es el siguiente

tengo una tabla "usuarios" asi:

idusuario|Nombre
1 | Juan
2 | Pedro
3 | Luis
4 | Marco

y una tabla "empresas" asi

idempresa|Nombre | idusuario
1 | Emp1 | 1
2 | Emp2 | 3
3 | Emp3 | 1
4 | Emp4 | 2
5 | Emp5 | 1
6 | Emp6 | 3
7 | Emp7 | 4
8 | Emp8 | 1

más una tabla "solicitudes" hechas por las empresas

idsolicitud | idempresa
1 | 2
2 | 1
3 | 2
4 | 4
5 | 2
6 | 1
7 | 3
8 | 2
9 | 3
10 | 4

Resulta que yo soy el usuario 1 y quiero ver las solicitudes que han hecho las empresas que tengo asignadas por lo cual realizo una consulta de la siguiente manera

select * from solicitudes where idempresa in (select idempresa where idusuario='1')

my pregunta es: esta es la manera mas eficiente de realizar esta consulta o existe una manera en que sea mas rapida o efectiva la respuesta, es que me da la impresion de que, aunque me funciona, la respuesta sea un poco lenta.

Ah. cabe anotar q no tengo relacionada las tablas con llaves, solo una llave primaria en los id

Gracias por su ayuda
  #2 (permalink)  
Antiguo 03/06/2019, 09:08
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 541
Antigüedad: 13 años, 7 meses
Puntos: 22
Respuesta: Buscar un valor en dos tablas (como es mas eficiente)

Primero lo que puede mejorar la performance de la consulta es que agregues las siguientes claves foreneas:

idempresa:solicitudes -> idempresa:empresas
idusuario:empresas -> idusuario:usuarios

Luego depende del motor de bases de datos que estés usando, pero muchas veces el optimizer performa mejor con consultas del siguiente estilo:

Código MySQL:
Ver original
  1. FROM solicitudes
  2.     SELECT true
  3.     FROM empresas
  4.     WHERE empresas.idusuario = 1 AND empresas.idempresa = solicitudes.idempresa
  5. )
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida
  #3 (permalink)  
Antiguo 03/06/2019, 09:21
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.381
Antigüedad: 12 años, 10 meses
Puntos: 770
Respuesta: Buscar un valor en dos tablas (como es mas eficiente)

Porque el exists, si se puede hacer con un join?

Código MySQL:
Ver original
  1. select * from solicitudes as t1
  2. inner join empresas as t2 on (t1.idempresa=t2.idempresa)
  3. where idusuario='1'

Aunado a que una llave foranea no ayuda en el performance, es solo para respetar la integridad de la informacion
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 05/06/2019, 05:34
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 541
Antigüedad: 13 años, 7 meses
Puntos: 22
Respuesta: Buscar un valor en dos tablas (como es mas eficiente)

Olvidé decir que las agregue como index también
__________________
www.marcher.com.uy - Web personal
Nerd's Corner - Desarrollo de software a medida



La zona horaria es GMT -6. Ahora son las 14:01.