Conversión automática ORACLE CBO SQL (Transformaciones basadas en costos) 4

Conversión automática ORACLE CBO SQL (Transformaciones basadas en costos) 4

La conversión mencionada antes es expandir la subconsulta cuando hay una Vista o una subconsulta, o empujar el predicado hacia la subconsulta.
¿Significa eso que la CBO solo está mirando la Vista o las subconsultas para hacer el trabajo? Por supuesto que la conclusión no lo es.
Por ejemplo, cuando se combinan dos tablas y se realiza una operación Agrupar por en una de las tablas, si el conjunto de resultados del Agrupar por se puede realizar primero y luego combinarse con otra tabla, puede tener un mejor efecto.
Desde entonces, existe una función óptima de configuración Agrupar por (Agrupar por ubicación).

Agrupar por función óptima de configuración (Agrupar por ubicación)

Sigue siendo el mismo, echemos un vistazo al estado original sin conversión.

drop table t1 purge;
drop table t2 purge;
create table t1(c1 number, c2 number not null);
create table t2(c1 number, c2 number not null);
insert into t1 values (1,1);
insert into t1 values (1,2);
insert into t1 values (2,2);
insert into t2 values (1,2);
commit;

SQL> select sum(t1.c2), t2.c2
from t1,t2
where t1.c1 = t2.c1
group by t2.c2;  2    3    4

SUM(T1.C2)         C2
---------- ----------
         3          2


Execution Plan
----------------------------------------------------------
Plan hash value: 51733071

----------------------------------------------------------------------------
| Id  | Operation           | Name | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |      |     2 |   104 |     7  (15)| 00:00:01 |
|   1 |  HASH GROUP BY      |      |     2 |   104 |     7  (15)| 00:00:01 |
|*  2 |   HASH JOIN         |      |     2 |   104 |     6   (0)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| T2   |     1 |    26 |     3   (0)| 00:00:01 |
|   4 |    TABLE ACCESS FULL| T1   |     3 |    78 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("T1"."C1"="T2"."C1")

Por supuesto, es la combinación normal de t1 y t2 primero, y luego se realiza GROUP BY en el resultado combinado.
A continuación, echemos un vistazo a cómo se ve Group By cuando configura un rendimiento óptimo.

SQL> select /*+ PLACE_GROUP_BY((t1)) */ sum(t1.c2), t2.c2
from t1,t2
where t1.c1 = t2.c1
group by t2.c2;  2    3    4

SUM(T1.C2)         C2
---------- ----------
         3          2


Execution Plan
----------------------------------------------------------
Plan hash value: 2158485392

----------------------------------------------------------------------------------
| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |     3 |   156 |     8  (25)| 00:00:01 |
|   1 |  HASH GROUP BY        |          |     3 |   156 |     8  (25)| 00:00:01 |
|*  2 |   HASH JOIN           |          |     3 |   156 |     7  (15)| 00:00:01 |
|   3 |    TABLE ACCESS FULL  | T2       |     1 |    26 |     3   (0)| 00:00:01 |
|   4 |    VIEW               | VW_GBC_1 |     3 |    78 |     4  (25)| 00:00:01 |
|   5 |     HASH GROUP BY     |          |     3 |    78 |     4  (25)| 00:00:01 |
|   6 |      TABLE ACCESS FULL| T1       |     3 |    78 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("ITEM_1"="T2"."C1")

La tabla t1 se convierte en VW_GBC_1, y GROUP BY se procesa primero en esta Vista y el conjunto de resultados se combina con t2. El logotipo cuando esta función está operativa es el nombre de vista VW_GBC_n.

Finalmente, si desea desactivar la función negra e inválida, puede utilizar los siguientes métodos:

"_Optimizer_group_by_placement" = FALSO。

O

使用 NO_PLACE_GROUP_BY sugerencia。

En este punto, el intercambio de resumen de la conversión automática SQL de CBO ha llegado a su fin. Espero que pueda ser de ayuda para todos los estudiantes. Si puede presentar sus valiosos comentarios, sería un gran honor.

Supongo que te gusta

Origin blog.csdn.net/weixin_50513167/article/details/115245489
Recomendado
Clasificación