Php 如果我为每个插入请求调用一个方法,是否浪费了服务器时间

Php 如果我为每个插入请求调用一个方法,是否浪费了服务器时间,php,mysql,class,oop,methods,Php,Mysql,Class,Oop,Methods,我正在研究PHP的OOP概念, 这是一个名为“connect”的类,它连接到数据库,并在数据库中插入请求_ class connect(){ public function insert($column, $value) { $insert = mysqli_query($this->con, "INSERT INTO $tablename ($column) VALUES ('$value')");

我正在研究PHP的OOP概念, 这是一个名为“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");

您的方式将比一个查询慢

看到这个测试了吗

更新:

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;
?>

我假设您指的是这样一个事实:与将所有命令转储到一个大文件中相比,调用一个函数可能“代价高昂”

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

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

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


一句话——您应该首先考虑使代码可读性和可维护性。然后在之后进行分析以检测真正的瓶颈。

您可以一次插入多行。因此,您必须一次获取每一组值,并只运行一次insert查询。我被你的术语
请求
弄糊涂了。它们是同一页面中的AJAX请求吗?他们是否在新的服务页面上获取HTTP请求?关于SQL执行,使用一个或多个插入执行没有多大区别(除非是数十万,我相信不是这样)。最重要的是连接,它需要一些时间来创建和销毁。您可以使用连接池。这将节省您的服务器时间,但同样,只有在事务数相关的情况下。创建单独的函数以连接数据库。如果您一个接一个地调用这些insert函数,那么它将比单个insert查询花费一些时间。sql事务如何?如果您确定某些查询失败,而其他查询成功,则不需要事务。否则,如果你想让所有人都成功,或者如果出了问题就什么都不成功,那么你就使用事务。哎哟。。那篇文章误导性太强,完全不正确,令人痛心。此外,还有一个很大的谜团被揭开了——为什么人们仍在使用
mysql\uu
函数——这是因为垃圾文章和每个人都有权拥有一个博客。不,这篇文章的全部观点都具有极大的误导性。是的,一个大的查询比x个小的查询性能更好。为什么?因为mysql将对查询执行一次lex,而不是执行10次lex。这就是为什么聪明人发明了事先准备好的陈述。另一件事是用MyISAM进行测试——虽然MyISAM有它的用途,但它仍然不提供事务。如果将100多个查询打包到一个事务中,则通过解析csv并插入csv来执行插入将非常高效。这基本上使MySQL在一个I/O中执行100次写入。在这个“基准测试”中有太多错误的地方。如果你在做这样的基准测试,你应该涵盖所有的场景,因为有人会认为这是一种方法,而事实并非如此。通过创建100个封装在单个事务中的插入(使用InnoDB)并使用准备好的语句来运行基准测试。你会看到截然不同的结果。这就是你没有涉及的情况。这就是人们在使用大量数据膨胀数据库时使用的场景。-->N.B;那么,您认为在INNODB中以“insert”(“username”,“testInsert141”);”的形式插入多个插入的数据好吗transaction@GAURAVMAHALE-使用预先准备好的语句,然后启动INSERT语句。它是:1)更容易理解2)更容易使用3)更安全,因为准备好的语句使用命名参数和现有的PHP库实现输入的净化4)正确使用时速度更快。
<?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;
?>