我不确定我是否理解准备好的声明,因为它与速度或效率有关。我读到在数据库服务器上编译了一个准备好的语句,可以反复使用。
但是,我说有一个网页。它做一个查询。下一个人拉出页面,相同的查询,只为该用户提供不同的参数。
在第二次点击网页时,是准备好的语句查看dbms以查看数据库服务器上是否已存在该特定查询?我不明白说这句话是什么意思,可以“一遍又一遍”地运行。它没有为每次运行页面做好准备吗?
此外,这不是关于sql注入。这是我理解的一部分,因为它与编译有关。
感谢。
编辑:我搜索过,但找不到答案。我只是被问到这个问题。
编辑:根据以下评论,鉴于我的方案,我看不到任何效率优势。安全是的。整个编译的东西。没有。有没有人能够举出一个可以满足效率问题的例子?
答案 0 :(得分:3)
在第一次执行期间创建的查询计划可以由数据库缓存(可能为连接到数据库的所有应用程序提供好处,运行相同的查询),也可以由数据库驱动程序缓存(为应用程序,只要它没有重新启动)。每次执行时仍会进行“软解析”,但这通常要便宜得多。
请注意,您的里程可能会有所不同,具体取决于数据库类型,驱动程序等。语句缓存通常也是有限的,这意味着缓存中只保留一定数量的语句。
Ask Tom提供了关于软解析和硬解析之间差异的一些答案。