我是否在为每个插入请求调用一种方法时浪费服务器时间

时间:2013-06-07 12:25:11

标签: php mysql class oop methods

我正在开发关于OOP概念的PHP, 这是名为“connect”的类,它连接到数据库并在数据库_

中插入请求
class connect(){
        public function insert($column, $value)
            {
            $insert = mysqli_query($this->con, "INSERT INTO $tablename ($column)
    VALUES ('$value')");
            }/* end of insert method */
}/* end of class 'connect' */

所有我只是想知道,如果我每次通过为每个请求调用'insert'方法插入,是浪费时间还是浪费更多服务器时间?或者我应该只使用一种方法插入所有一次请求?;

$call = new connect("localhost", "root", "", "facebook","fb1");
$call->insert("username", "testInsert141");
$call->insert("username", "testInsert141");
$call->insert("username2", "testInsert142");
$call->insert("username3", "testInsert143");

2 个答案:

答案 0 :(得分:6)

我认为你指的是,与将所有命令转储到一个巨大的文件中相比,调用函数可能“成本高昂”。

基本上,是的 - 理论上需要更多时间。你应该担心这个时间吗?没有。

您应该担心的是代码中实际上会影响时间消耗的部分。在您的示例中,如果不是更多,mysql启动可能需要90%的处理时间。你应该确保你只连接到mysql一次。

此外,当发送一个查询来执行所有插入时, mysql端上的插入查询可能会更快。但是,这也可能是微不足道的。确定这一点的最佳方法是测试和分析您的代码。

底线 - 您应该首先担心使代码可读和可维护。然后在检测到真正的瓶颈之后进行分析。

答案 1 :(得分:3)

对一个查询,你的方式会变慢。

请参阅此测试http://blog.cnizz.com/2010/05/31/optimize-mysql-queries-fast-mutliple-row-inserts/

<强>更新

mysqli测试:

<?php
$s = microtime(true);
$mysqli = new mysqli("127.0.0.1", "root", "pass", "test", 3306);
for($i=0;$i<1000;$i++){
    $mysqli->query("INSERT INTO admin SET name='hello world'");
}
$e = microtime(true);
echo $e-$s;
?>

28.007468938828 - INNODB

0.19577789306641 - MYISAM

<?php
$s = microtime(true);
$mysqli = new mysqli("127.0.0.1", "root", "pass", "test", 3306);
$sql = "INSERT INTO admin (`name`) VALUES ";
for($i=0;$i<1000;$i++){
    $sql.= "('hello world'),";
}
$sql = substr($sql,0,-1);
$mysqli->query($sql);

$e = microtime(true);

echo $e-$s;
?>

0.06469202041626 - INNODB

0.052706003189087 - MYISAM

(在Athlon X2 2.7MHz上测试)

和英特尔I3 2.4MHz大致相同的分数