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

Respuesta
 
Herramientas Desplegado
Antiguo 09-jul-2008, 10:02   #1 (permalink)
salbatore ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 569
Rapidez y los UNION

Hola, foreros:

He leido en varios post que el uso de UNION en varias tablas para buscar hace que valla lento el sql.

Entonces... ¿Como hago para buscar en varias tablas o simplemente manejarlas?
salbatore está desconectado   Responder Citando
Antiguo 09-jul-2008, 12:01   #2 (permalink)
eft0 tiene algunos puntos positivos de karma
 
Avatar de eft0
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago - Chile
Mensajes: 591
Respuesta: Rapidez y los UNION

El union sirve para mezclar dos o mas consultas SELECT en un unico conjunto de resultados, para buscar en varias tablas tienes simplemente que indicarle en el FROM y WHERE.
__________________
eft0's stuff! - http://eft0.nobody.cl
eft0 está desconectado   Responder Citando
Antiguo 09-jul-2008, 12:04   #3 (permalink)
Moderador
GatorV es realmente agradableGatorV es realmente agradableGatorV es realmente agradableGatorV es realmente agradableGatorV es realmente agradableGatorV es realmente agradable
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 12.594
Respuesta: Rapidez y los UNION

Tema trasladado a Bases de Datos.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 09-jul-2008, 13:19   #4 (permalink)
matanga ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 494
Respuesta: Rapidez y los UNION

Hola,

Cita:
...el uso de UNION en varias tablas para buscar hace que valla lento el sql.
Interesante afirmacion, habra que darle algunas vueltas...

En primer lugar hay que definir la diferencia entre UNION y UNION ALL, el primero tiene un costo adicional dado que elimina los registros repetidos despues de la union de datos de las dos tablas, esto no es una operacion trivial, a veces es preferible tener un par de registros duplicado que el costo de la operacion.

En segundo lugar estan los filtros de busqueda y si tienen indices los campos, ya que cualquier motor (lo asumo) primero filtra por el WHERE y al resultado aplica la UNION.

Por ejemplo

Código:
SQL> select * from t1;

        ID DATA
---------- ------------------------------
         1 data
         2 data
         3 data
         4 data
         5 data

SQL> select * from t2;

        ID DATA
---------- ------------------------------
         6 data
         7 data
         8 data
         9 data
        10 data
Código:
SQL> explain plan for
  2  with s as (
  3  select id, data from t1
  4  union
  5  select id, data from t2
  6  )
  7  select * from s where id = 6
  8  /

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3372616832

--------------------------------------------------------------------------------------------
| Id  | Operation                      | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |           |     2 |    60 |     6  (34)| 00:00:01 |
|   1 |  VIEW                          |           |     2 |    60 |     6  (34)| 00:00:01 |
|   2 |   SORT UNIQUE                  |           |     2 |    60 |     6  (84)| 00:00:01 |
|   3 |    UNION-ALL                   |           |       |       |            |          |
|   4 |     TABLE ACCESS BY INDEX ROWID| T1        |     1 |    30 |     1   (0)| 00:00:01 |
|*  5 |      INDEX UNIQUE SCAN         | IND_T1_ID |     1 |       |     0   (0)| 00:00:01 |
|*  6 |     TABLE ACCESS FULL          | T2        |     1 |    30 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------
Tengo dos tablas, T1 y T2, donde T1 tiene un indice unique en el campo ID, que por cierto es el filtro del WHERE y T2 no tiene ningun indice, por lo tanto en la operacion 5 tengo el filtro WHERE ID = 6 utilizando el indice y en la operacion 6 tengo un FULL SCAN sobre T2 por no tener ninguno, al resultado se aplica la union, operacion 3, mientras que la operacion 2 es la adicional por no utilizar un UNION ALL, esto es, ordenar todos los registros para eliminar los repetidos.

Como conclusion, si los campos a los que aplico los filtros estan indexados, no deberia haber problemas, entonces de donde viene la afirmacion, en mi opinion, el problema esta en que buscas en 2 o mas tablas la informacion que esta en una sola.

Imagina el siguiente escenario, tengo 10 tablas, y dos opciones, 10 consultas SQL para buscar la informacion por tabla o 1 consulta SQL con la UNION de las 10, en el primer caso, si encuentro la informacion en la primera tabla, ya no tengo que recorrer las 9 restantes, y ahi es donde puede estar el costo adicional.

Saludos
matanga está desconectado   Responder Citando
Antiguo 10-jul-2008, 15:57   #5 (permalink)
salbatore ha deshabilitado el karma
 
Fecha de Ingreso: abril-2007
Mensajes: 569
Respuesta: Rapidez y los UNION

Hola...

Ok!, entendido....

Gracias...
salbatore 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 20:35.


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