我正在开发关于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");
答案 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大致相同的分数