Oracle-bind_-aware提示在v$sql结果中未显示为“bind_-aware”
在我的办公室里,我们使用了大量的Oracle-bind_-aware提示在v$sql结果中未显示为“bind_-aware”,oracle,query-optimization,oracle12c,Oracle,Query Optimization,Oracle12c,在我的办公室里,我们使用了大量的/*+bind\u-aware*/提示,今天早上我决定做一个快速测试,看看它们是否像我预期的那样工作 我从一个常用的表开始,我们称之为person,并对其进行简单的查询,如下所示: SELECT /* foo */ /*+ bind_aware */ * FROM person WHERE person_id = :person; 但运行上述查询后,结果如下: SELECT child_number, executions, buffer_gets,
/*+bind\u-aware*/
提示,今天早上我决定做一个快速测试,看看它们是否像我预期的那样工作
我从一个常用的表开始,我们称之为person
,并对其进行简单的查询,如下所示:
SELECT /* foo */ /*+ bind_aware */ * FROM person WHERE person_id = :person;
但运行上述查询后,结果如下:
SELECT child_number, executions, buffer_gets,
is_bind_sensitive, is_bind_aware, is_shareable
FROM v$sql
WHERE sql_text LIKE 'SELECT /* foo%';
CHILD_NUMBER EXECUTIONS BUFFER_GETS IS_BIND_SENSITIVE IS_BIND_AWARE IS_SHAREABLE
0 1 26 N N Y
唉,我希望是\u BIND\u AWARE=Y
在个人id
上有一个混合直方图,如下所示:
SELECT COLUMN_NAME, HISTOGRAM
FROM ALL_TAB_COL_STATISTICS
WHERE TABLE_NAME = 'PERSON'
AND COLUMN_NAME = 'PERSON_ID';
COLUMN_NAME HISTOGRAM
PERSON_ID HYBRID
PERSON\u ID
列已编制索引并具有唯一标识符,但我仍然希望它具有绑定感知功能。为什么不是这样?如果这是此表上的唯一标识符,为什么您希望计划会发生变化?也就是说,我不希望它是绑定敏感或绑定感知的。该计划不应根据您在查询中绑定的person_id进行更改。我看到了以下两篇文章,希望至少看到两个游标和强制游标共享。光标是可共享的,但仍然不支持绑定。绑定敏感游标表示它是计划更改的候选对象。Bind-aware是实际应该更改的游标。如果您正在为生活在给定状态(其中state=:state)中的人提取数据,并且数据非常倾斜,那么您可能有一个根据绑定状态而改变的计划。在您的情况下,基于唯一索引(person_id)查找一行将有相同的计划,无论person_id是什么,谢谢,这很有帮助;我没有意识到这种区别。这是否意味着即使没有提示,查询也可以标记为bind-aware?是的,这是正确的