6

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

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

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

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

谢谢。

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

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

4

1 回答 1

3

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

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

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

于 2013-01-09T11:17:03.043 回答