绑定变量窥测


事物都存在两面性,绑定变量对大多数OLTP处理是适用的,但是也有例外。比如在where条件中的字段是“倾斜字段”的时候。

“倾斜字段”指该列中的绝大多数的值都是相同的,比如一张人口调查表,其中“民族”这列,90%以上都是汉族。那么如果一个SQL语句要查询30岁的汉族人口有多少,那“民族”这列必然要被放在where条件中。这个时候如果采用绑定变量@nation会存在很大问题。

试想如果@nation传入的第一个值是“汉族”,那整个执行计划必然会选择表扫描。然后,第二个值传入的是“布依族”,按理说“布依族”占的比例可能只有万分之一,应该采用索引查找。但是,由于重用了第一次解析的“汉族”的那个执行计划,那么第二次也将采用表扫描方式。这个问题就是著名的“绑定变量窥测”,建议对于“倾斜字段”不要采用绑定变量。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Oracle的解释计划是通过使用EXPLAIN PLAN语句来显示优化器为SQL语句选择的执行计划。需要注意的是,解释计划只是预期的执行计划,并不是实际的执行计划和相关的数据源执行统计信息。\[2\]解释计划输出提供了估计的信息,而不是实际的信息。实际的执行计划和统计信息可以通过动态性能视图中的sql_id和sql_child_number字段来查找。这两个字段分别代表SQL语句的解析结果和执行计划序号。可以在v$session和V$sql视图中找到这些字段。如果想查看当前正在执行的SQL的执行计划,可以使用相应的SQL查询这两个字段。\[3\]需要注意的是,由于命令explainplan不能使用绑定变量窥测,所以使用绑定变量时,explainplan生成的执行计划可能不可靠。\[1\] #### 引用[.reference_title] - *1* *3* [Oracle解释计划](https://blog.csdn.net/zhwwanwan/article/details/8624094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [oracle解释&执行计划-Oracle](https://blog.csdn.net/weixin_36012968/article/details/116447006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值