Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Bases de Datos General (http://www.forosdelweb.com/f21/)
-   -   Rapidez y los UNION (http://www.forosdelweb.com/f21/rapidez-union-604257/)

salbatore 09/07/2008 10:02

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?

eft0 09/07/2008 12:01

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.

GatorV 09/07/2008 12:04

Respuesta: Rapidez y los UNION
 
Tema trasladado a Bases de Datos.

matanga 09/07/2008 13:19

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

salbatore 10/07/2008 15:57

Respuesta: Rapidez y los UNION
 
Hola...

Ok!, entendido....

Gracias...


La zona horaria es GMT -6. Ahora son las 06:29.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.