当前位置:  开发笔记 > 编程语言 > 正文

当您只进行一次选择时,使用准备好的Select语句会更好吗?

如何解决《当您只进行一次选择时,使用准备好的Select语句会更好吗?》经验,为你挑选了1个好方法。

我目前正在使用PDO在PHP中编写CRUD类.

我喜欢准备语句提供的安全性,但我听说他们也阻止像mysql这样的数据库使用queryCache.

当您一次只进行一次选择时,使用准备好的Select语句会更好吗?或者只是$ pdo-> quote()就足够了安全立场(或者还有其他任何优点,比如缓存?).

我的所有更新,删除和插入都是使用预准备语句完成的.我只是对选择感到好奇.



1> Bill Karwin..:

MySQLPerformanceBlog.com在一篇关于" 准备好的陈述 " 的文章中做了一些基准测试.Peter Zaitsev写道:

我已经做了一个简单的基准测试(使用SysBench)来查看使用标准语句,预准备语句的简单查询(单行点选择)的性能,并将其从查询缓存中提供.准备语句提供2290个查询/秒,这明显优于2000标准语句,但是当从查询缓存提供结果时,它仍远低于4470个查询/秒.

这似乎表明使用预准备语句的"开销"是它们比使用直接查询执行 14.5%,至少在这个简单的测试中.对于更复杂的查询或更大的结果集,相对差异可能会减小.

考虑到服务器的双重往返和其他因素,准备好的查询会更快,这似乎是违反直觉的.彼得的基准缺乏细节.无论如何,您应该运行自己的测试,因为您运行的查询类型以及您的环境和硬件绝对是重要的因素.

对于查询缓存,过去确实准备好的语句与缓存查询结果不兼容,但这已经改变了.请参阅MySQL文档中的" 查询缓存如何操作 ":

在MySQL 5.1.17之前,预准备语句不使用查询缓存.从5.1.17开始,预准备语句在某些条件下使用查询缓存,这取决于准备方法:...

文档继续描述这些条件.去看吧.

我建议使用预准备语句进行SELECT查询.如果一致地执行变量,在将变量插入到SQL语句中时引用变量会很有效.但即便引用也可能存在一些微妙的安全漏洞,例如使用多字节字符集(参见MySQL bug#8378).在这些情况下,以安全的方式使用准备好的查询会更容易.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有