准备好的陈述如何运作? 说我的查询已编译是什么意思



我不确定我是否理解与速度或效率相关的准备好的陈述。 我读到预准备语句是在数据库服务器上编译的,可以反复使用。

但是,假设我有一个网页。 它执行一个查询。 下一个人拉出页面,相同的查询,只是该用户的不同参数。

第二次点击网页时,准备好的语句是否在 dbms 上查看数据库服务器上是否已存在该特定查询? 我不明白说该语句已编译并且可以"一遍又一遍"运行是什么意思。 它不是每次运行页面都准备好吗?

此外,这与 sql 注入无关。 这是我确实理解的一部分,因为它与编译有关。

谢谢。

编辑:我已经搜索过,但找不到答案。 我只是被引导到这个问题。

编辑:根据下面的评论,鉴于我的情况,我看不到任何效率优势。 安全性是的。 整个编译的东西。 不。 有没有人可以举一个场景作为例子,确实满足效率问题?

在第一次执行期间创建的查询计划可以由数据库缓存(可能为连接到数据库的所有应用程序提供好处,运行相同的查询)或数据库驱动程序(为应用程序提供好处,只要它不重新启动)。每次执行时仍将进行"软解析",但这通常便宜得多。

请注意,您的里程可能会有所不同,具体取决于数据库类型、司机等。语句缓存通常也是有限的,这意味着缓存中只会保留一定数量的语句。

Ask Tom 提供了一些关于软解析和硬解析之间区别的答案。

最新更新