首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当对数据数组进行操作时,PDO真的比mysql_*更快吗?

问当对数据数组进行操作时,PDO真的比mysql_*更快吗?
EN

Stack Overflow用户
提问于 2014-03-05 21:54:01
回答 2查看 69关注 0票数 1

我最近把我的思想从mysql_*提升到了PDO,我有一个简单的问题:

在execute循环中使用准备好的语句和for-each比在mysql中使用多个值的单个调用要快得多吗?

例如,如果我有一个由5个名称组成的数组,那么将这些名字放在一个execute命令中,在一个for循环中操作“insert”准备好的语句--这5次调用在计算速度上比使用旧的mysql调用单个查询中的所有5个值要快吗?或者是出于安全考虑,而不是单纯的速度?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-06 06:20:08

本机准备语句(您称之为"PDO")的意义和意义被每个人忽略和误判。

速度的好处,每个人都在谈论这么多,在现实中可以实现极其罕见,而且往往根本不引人注目。特别是在PDO所属的PHP网页开发领域。

还请注意,无论速度有多大,都只属于查询解析--没有像索引重建或查找记录所需的时间被准备好的语句影响。

所以,说到像5这样的数字,不要为这种“一次准备-多次执行”的事情而烦恼。这不是PDO的意思。做了的两件基本事情,这使得它比其他两个可能的扩展更可取:

  • 它一般支持准备好的语句,允许查询中的数据不是直接的,而是通过占位符。这是您应该使用PDO或类似lib的唯一原因(尽管您可以轻松地使旧的mysql ext支持准备好的语句,但PDO提供了现成的)
  • 使这种支持不像mysqli那样痛苦

回到你的问题上:

  1. 你可以任意使用你喜欢的方式。请记住,由于现代DB引擎的默认设置,在事务中包装多个插入比较好。
  2. 无论您选择哪种方式,任何动态值都应该通过占位符(仅通过)添加到查询中。如果您仍然不确定,欢迎您阅读第一篇文章是关于这个问题的(虽然还不完整,但是对准备好的陈述的真正意义有一个完整的解释)。。

PS。本机准备语句也有一个小好处,常常被遗忘(因为很少被要求)--如果使用本机准备语句(并由msqlnd驱动程序支持),返回的数据已经按照其类型进行格式化。

票数 4
EN

Stack Overflow用户

发布于 2014-03-05 22:02:03

一个获取5行的查询可能比5个单独的调用更快,因此您正在比较苹果和桔子。

在执行相同的查询时,性能也将相似。PDO的(小)性能优势在于,带有参数的查询被认为是更好的可达性。当查询customer 3和customer 5时,查询将被缓存为两个不同的查询,而只有id是不同的。通过使用参数,数据库可能以更明智的方式缓存查询,因此具有不同输入的第二个调用不需要经过查询优化器等。

也就是说,除了性能优势之外,PDO也更安全(当实际使用参数时),而且最终更容易。一开始,它看起来可能更复杂,但它更容易正确,因为如果不使用参数,您将需要自己完成所有的逃逸操作,从而冒出危险的bug。

顺便说一句,您还可以构建一个带有可变数量参数的查询,并将一个值绑定到一个循环中的每个参数,因此使用PDO,您仍然可以执行5行的单个insert查询,尽管它需要一些困惑和一些额外的代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22210170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档