DB2中的prepare和bind
要解释这些还关系到好几个概念:
1. 动态SQL和静态SQL:在程序运行的时候才能确定执行计划的SQL是动态的;在程序编译的时候就已经可能知道执行计划的是静态的
2. prep/precompile:不要把prep看成是prepare了,这里是预编译
3. 嵌入式SQL:这个就没办法找到很好的定义了。一般来说使用标准接口的程序都是非嵌入式的,像CLI/JDBC/ODBC。现在只有C和COBOL是支持嵌入式SQL的了。目前大部分应用程序都不是嵌入式的了。
接下来再看看:
PREPARE:目的主要是把动态SQL进行解析成标准函数,生成package,让其在程序运行时生成执行计划。主要是针对动态SQL的。
BIND:主要是针对静态SQL语句的,在BIND的过程当中语句的package就已经获得执行计划了。在precompile的时候就已经绑定了,如果有什么修改会导致静态SQL的执行计划会更改的,就需要rebind。一般来说是在开发环境里面重新编译一下,重新生成bnd文件,然后将新的bnd文件拷贝到生产环境里面再rebind。另外,只有SP、UDF和使用了嵌入式SQL的程序才需要BIND。
分类:
DB2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端