【问题标题】:MySQL prepared statements vs simple queries performanceMySQL 准备好的语句与简单查询的性能
【发布时间】:2011-03-25 16:08:30
【问题描述】:

我做了一些测试,首先我用$pdo->prepare()$insert_sth->execute() 测试了mysqlprepared statement 10k 插入(如果重要的话,使用命名参数),它花了301s。

之后,我进行了简单的插入查询,并且每次都插入相同的 10k 插入,并且花费了 303 秒。

所以我想知道:准备好的语句真的会带来性能优势吗?因为我的测试没有显示出来,或者我必须优化我准备好的语句版本以使它们更快?

如果需要,我可以提供我的源代码。

【问题讨论】:

  • 我猜没有性能提升 b/c 简单的INSERT 查询没有被 MySQL 查询解析器优化 - 不像 SELECT 语句。
  • 我在某处读到 PDO 只是“伪造”一个准备好的语句,而 MySQL 我实际上是在服务器上来回设置内存空间。

标签: mysql


【解决方案1】:

我更喜欢准备好的语句,而不是性能(不确定它是否更快),例如避免 sql 注入。

【讨论】:

    【解决方案2】:

    INSERTs 很可能是 IO 绑定的,因为它们在 SQL 方面通常不是很复杂 - 只是要放入其中的列和数据的列表。因此,您用于执行查询的内容在运行时并不像您填充到数据库中的数据量、将数据获取到数据库服务器的速度以及数据库服务器的速度那样重要可以保存。

    【讨论】:

    • 是的,但是在文档中它被告知查询被缓存在 sql server 上,并且您只发送插入的参数,因此服务器不必检查错误和其他重复操作,所以理论上,应该会有一些性能上的好处。
    • 是的,但我要说的是,这种情况下的查询通常相对于 data 非常小,因此您看不到任何显着差异,因为任何与发送数据所花费的时间相比,实际差异很小。
    • 谢谢,我会尝试测试更复杂的语句,并会看到结果。
    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2011-09-12
    • 2011-09-16
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多