viernes, 25 de abril de 2025

Comportamiento de los Algoritmos de Join en Oracle

Introducción


Como ya sabemos los JOINS (Inner, left, right, full, cross, etc) son parte de la elaboración de los SQL para generar consultas en las base de datos segun nuestro criterio para combinar las direntes entidades de datos.

Ahora viendo a detalle como el motor de la base con su optimizador hace este trabajo? el optimizador usa algoritmos bajo su criterio para hacer esta tarea.

En Oracle, los algoritmos de join son fundamentales para combinar datos de múltiples tablas. El optimizador de Oracle utiliza varios métodos para realizar estas uniones de manera eficiente: 

  • Nested Loops Join
  • Hash Join
  • Sort-Merge Join

En este artículo, exploraremos cómo funcionan estos métodos, cómo se representan en los planes de ejecución y proporcionaremos ejemplos prácticos con imágenes para ilustrar su funcionamiento.

Métodos de Join en Oracle

Nested Loops Join  


El método Nested Loops Join es uno de los más comunes y se utiliza cuando una tabla tiene un índice que puede ser aprovechado para realizar la unión. Este método es eficiente para conjuntos de datos pequeños o cuando el índice es altamente selectivo.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;

Plan de Ejecución:

--------------------------------------------------------------------------------
| Id  | Operation           | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |             |   107 |  8560 |     3   (0)| 00:00:01 |
|   1 |  NESTED LOOPS       |             |   107 |  8560 |     3   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL | EMPLOYEES   |   107 |  7490 |     2   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL | DEPARTMENTS |    27 |   810 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------

Hash Join



El Hash Join es ideal para grandes conjuntos de datos y se utiliza principalmente para equi-joins. Oracle crea una tabla hash en memoria para una de las tablas y luego escanea la otra tabla para encontrar coincidencias.

SELECT e.employee_id, e.first_name, d.department_name 
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
    

Plan de Ejecución:

--------------------------------------------------------------------------------
| Id  | Operation           | Name        | Rows  | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |             |   107 |  8560 |     3   (0)| 00:00:01 |
|   1 |  HASH JOIN          |             |   107 |  8560 |     3   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL | EMPLOYEES   |   107 |  7490 |     2   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL | DEPARTMENTS |    27 |   810 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------

Sort-Merge Join


El Sort-Merge Join se utiliza cuando ambas tablas están ordenadas por las columnas de la condición de join. Este método es eficiente para grandes conjuntos de datos que ya están ordenados.


SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
    

Plan de Ejecución:

--------------------------------------------------------------------------------
| Id  | Operation           | Name        | Rows  | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |             |   107 |  8560 |     3   (0)| 00:00:01 |
|   1 |  SORT MERGE JOIN    |             |   107 |  8560 |     3   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL | EMPLOYEES   |   107 |  7490 |     2   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL | DEPARTMENTS |    27 |   810 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------
  

Conclusión

Los métodos de join en Oracle son esenciales para la eficiencia de las consultas en bases de datos relacionales. Comprender cómo funcionan y cómo se representan en los planes de ejecución puede ayudarte a optimizar tus consultas y mejorar el rendimiento de tu base de datos.

No hay comentarios:

Publicar un comentario