我最近把我的思想从mysql_*提升到了PDO,我有一个简单的问题:
在execute循环中使用准备好的语句和for-each比在mysql中使用多个值的单个调用要快得多吗?
例如,如果我有一个由5个名称组成的数组,那么将这些名字放在一个execute命令中,在一个for循环中操作“insert”准备好的语句--这5次调用在计算速度上比使用旧的mysql调用单个查询中的所有5个值要快吗?或者是出于安全考虑,而不是单纯的速度?
发布于 2014-03-06 06:20:08
本机准备语句(您称之为"PDO")的意义和意义被每个人忽略和误判。
速度的好处,每个人都在谈论这么多,在现实中可以实现极其罕见,而且往往根本不引人注目。特别是在PDO所属的PHP网页开发领域。
还请注意,无论速度有多大,都只属于查询解析--没有像索引重建或查找记录所需的时间被准备好的语句影响。
所以,说到像5这样的数字,不要为这种“一次准备-多次执行”的事情而烦恼。这不是PDO的意思。做了的两件基本事情,这使得它比其他两个可能的扩展更可取:
回到你的问题上:
PS。本机准备语句也有一个小好处,常常被遗忘(因为很少被要求)--如果使用本机准备语句(并由msqlnd驱动程序支持),返回的数据已经按照其类型进行格式化。
发布于 2014-03-05 22:02:03
一个获取5行的查询可能比5个单独的调用更快,因此您正在比较苹果和桔子。
在执行相同的查询时,性能也将相似。PDO的(小)性能优势在于,带有参数的查询被认为是更好的可达性。当查询customer 3和customer 5时,查询将被缓存为两个不同的查询,而只有id是不同的。通过使用参数,数据库可能以更明智的方式缓存查询,因此具有不同输入的第二个调用不需要经过查询优化器等。
也就是说,除了性能优势之外,PDO也更安全(当实际使用参数时),而且最终更容易。一开始,它看起来可能更复杂,但它更容易正确,因为如果不使用参数,您将需要自己完成所有的逃逸操作,从而冒出危险的bug。
顺便说一句,您还可以构建一个带有可变数量参数的查询,并将一个值绑定到一个循环中的每个参数,因此使用PDO,您仍然可以执行5行的单个insert查询,尽管它需要一些困惑和一些额外的代码。
https://stackoverflow.com/questions/22210170
复制相似问题