区分大小写会影响oracle DB中的SQL解析

我知道

select * from employees;

select * from Employees;

将生成2个diff SQLid和哈希值,但最终使用相同的hashplan值。 那么它是软解析还是硬解析? 如果计划哈希值相同,两个语句将使用相同的执行计划吗?

asdf564e 回答:区分大小写会影响oracle DB中的SQL解析

它们是不同的游标,因此,是的,第二个游标将需要完整的解析和优化。

优化器将分别评估每个查询,但是由于它们实际上是相同的查询(相同的表,某些联接,过滤器等),因此它将产生相同的执行计划,除非在解析第一个查询和第二个查询之间有所变化。 / p>

请注意,这是PL / SQL的优势之一,因为编译器会在内部剥离所有格式和大小写差异,这意味着,如果将它们用于PL / SQL,它们将成为同一光标。

,

是的,这两个语句将获得不同的sql_id。但是,正如您在 the following demo 中看到的那样,两个语句的plan_hash_value保持不变。

由于plan_hash_value唯一地标识硬解析和相关的执行计划,因此这表明优化器确实确定两个查询相同,并在共享池中检索现有计划,而不是硬解析第二个时间。

create table employees(id int);

select * from employees;

| ID |
| -: |

select sql_id,hash_value,plan_hash_value
from v$sql 
where sql_text like 'select * from %mployees';

SQL_ID        | HASH_VALUE | PLAN_HASH_VALUE
:------------ | ---------: | --------------:
f34thrbt8rjt5 | 4069246757 |      1445457117


select * from Employees;

| ID |
| -: |

select sql_id,plan_hash_value
from v$sql 
where sql_text like 'select * from %mployees';

SQL_ID        | HASH_VALUE | PLAN_HASH_VALUE
:------------ | ---------: | --------------:
f34thrbt8rjt5 | 4069246757 |      1445457117
bvgw7mnuubskb |  900063819 |      1445457117

Here 是相关阅读。

本文链接:https://www.f2er.com/3090576.html

大家都在问