【问题标题】:mysql performance for php callsphp调用的mysql性能
【发布时间】:2010-10-08 07:11:54
【问题描述】:

我的代码有多个 php 函数,每个函数都尝试设置 mysql 连接、发送查询并关闭 mysql 连接。这是一个好的设计还是我应该从主函数建立一个连接,然后将变量传递给这些函数中的每一个以执行查询?

另外,当试图在 func1() 中执行 mysql_query 的第二个实例时,这段代码是否可能会出错? func2中调用的mysql连接的实例不会独立于func1中调用的实例吗?在我的代码中,我似乎得到了不一致的行为。有时,我收到错误,但是当我刷新页面时,似乎没有问题。欢迎任何建议。谢谢。

def func1() {

mysql_connect(params)

mysql_query()

func2()

mysql_query()

mysql_close()

}


def func2() {

mysql_connect(params)

mysql_query()

mysql_close()

}

【问题讨论】:

    标签: php mysql performance


    【解决方案1】:

    我不能说它对性能的影响很糟糕,但它没有任何意义。
    打算打开一次的数据库连接。
    如果你需要从盒子里取出 5 个苹果——你会打开和关闭这个盒子 5 次吗?或者只是打开它并立即获取所有内容? ;-)
    这里也一样。

    只打开一次连接,永远不要关闭它。它会自动完成。

    【讨论】:

    • 我同意你的观点,我只是太担心保持我的代码模块化和传递更少的变量。虽然看起来不合理,但我当然可以传递另一个变量。
    • @user429113 你也可以保持模块化。有2种方法。一个简单的(我个人更喜欢它):不要传递任何东西。默认情况下,所有 mysql 函数都可以使用上次打开的连接。无需打开或传递任何东西。对于 99.9% 的脚本,这就足够了。唯一需要显式设置连接资源的情况是需要 2 个不同的连接。这是你的第二个选择。将连接资源存储在一个变量中并传递它(在内部,当然,在你的数据库类内部,当函数在其他任何地方调用时不需要传递它)
    【解决方案2】:

    您应该使用单例来创建或获取唯一的 MySQL 连接,不建议使用多个,因为您必须“命名”每个连接并指定要使用的连接。

    【讨论】:

      【解决方案3】:

      我通常在我的项目中使用一个连接。

      //on the beginning of the file I connect to the database
      $bdconn = mysql_connect(/* params */);
      
          //things to do on the page
          {...}
      //at the end of the page I disconnect from it
      mysql_close($dbconn);
      

      如果您在运行时还必须连接到其他数据库,那么您只需连接到另一个数据库,然后重新连接到第一个数据库。我认为同时处理多个数据库并没有什么用处。

      【讨论】:

      • 如果您担心性能,我还强烈建议您推迟创建连接,直到您的代码实际需要使用它。 (如果您包装 mysql_query 调用并使用静态变量进行连接,这很简单)
      猜你喜欢
      • 2022-11-11
      • 2014-02-25
      • 2014-05-20
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      相关资源
      最近更新 更多