ORACLE-SQL性能优化(2)

绑定变量解决重编译问题

未使用绑定变量的语句

sprintf(sqlstr, "insert into scott.test1 (num1, num2) values (%d,%d)",n_var1, n_var2);

EXEC SQL EXECUTE IMMEDIATE :sqlstr ; EXEC SQL COMMIT;

使用绑定变量的语句

strcpy(sqlstr, "insert into test (num1, num2) values (:v1, :v2)"); EXEC SQL PREPARE sql_stmt FROM :sqlstr;

EXEC SQL EXECUTE sql_stmt USING :n_var1, :n_var2; EXEC SQL COMMIT;

绑定变量的注意事项

注意:

1、不要使用数据库级的变量绑定参数cursor_sharing来强

制绑定,无论其值为 force 还是similar

2、有些带> < 的语句绑定变量后可能导致优化器无法正确

使用索引

SQL语句的处理过程

SQL语句的四个处理阶段

SQL语句的处理过程

解析(PARSE)

  1. 在共享池中查找SQL语句
  2. 检查语法
  3. 检查语义和相关的权限
  4. 合并(MERGE)视图定义和子查询
  5. 确定执行计划

SQL语句的处理过程

绑定(BIND)

  1. 在语句中查找绑定变量
  2. 赋值(或重新赋值)

SQL语句的处理过程

执行(EXECUTE)

  1. 应用执行计划
  2. 执行必要的I/O和排序操作

提取(FETCH)

  1. 从查询结果中返回记录
  2. 必要时进行排序
  3. 使用ARRAY FETCH机制

共享游标:好处

  1. 减少解析
  2. 动态内存调整
  3. 提高内存使用率

书写可共享的SQL

绑定变量和共享游标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秒变学霸的18岁码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值