Php 循环更新查询的数据库性能?

Php 循环更新查询的数据库性能?,php,mysql,database,performance,Php,Mysql,Database,Performance,我目前正在使用CodeIgniter构建数据库更新模型的查询 我使用$keys=array\u keys($\u POST) 为了更新相应的数据库字段,我想这样做 foreach($keys as $key){ $data = $this->input->post($key); $this->db->query("Update $table SET '$key'='$data' WHERE user_id='$the_user->id'"); }

我目前正在使用CodeIgniter构建数据库更新模型的查询

我使用
$keys=array\u keys($\u POST)

为了更新相应的数据库字段,我想这样做

foreach($keys as $key){
    $data = $this->input->post($key);
    $this->db->query("Update $table SET '$key'='$data' WHERE user_id='$the_user->id'");  }
(这不是生产代码,只是试图说明我的问题,因此没有转义、验证等…)

我的问题是,对于提交的每个表单数据,运行单独的查询是否会造成性能问题

编辑:抱歉,我不想让它听起来像是或不是的问题,很明显,如果是或不是,答案是肯定的,但我想了解更多关于它在多大程度上阻碍了性能的信息?

是的

您正在发布多个更新,而不是一个更新。 性能影响不大可能出现在php循环中,而更多地出现在数据库连接中;因此,最小化应用程序和数据库之间的事务量将提高性能

您可以尝试:

  • 在提交之前生成SQL字符串:

    UPDATE <table> SET key1=data1, key2=data2, key3=data3 WHERE user_id=<user>
    
    更新设置key1=data1,key2=data2,key3=data3,其中用户id=
    
  • 在同一事务中执行多个更新:

    $this->db->query("
        UPDATE <table> SET key1=data1 WHERE user_id=<user>;
        UPDATE <table> SET key2=data2 WHERE user_id=<user>;
        UPDATE <table> SET key3=data3 WHERE user_id=<user>;"
    );
    
    $this->db->query(“
    更新SET key1=data1,其中user_id=;
    更新SET key2=data2,其中user_id=;
    更新设置key3=data3,其中用户_id=;”
    );
    
  • 我不确定PHP/MySQL如何处理第二个选项。Perl/Postgres可以做到这一点。此外,我认为第一种选择会更快


    另一个要考虑的事项,如果你是针对多个用户这样做的,在中使用<代码>(如<代码>,其中USER ID在($UsSeriLIST)中,其中$ UsSeriLIST是一个格式为“USER1”、“USER 2”、“USER 3”/代码>的用户字符串。

    更新的问题以反映我对答案的希望,抱歉,我之前不清楚。性能影响将取决于您有多少键/值对、执行了多少查询、表有多大等等。如果您只执行5个查询,这几乎是瞬间的。更大的性能影响是确保
    user\u id
    字段被索引。如您所述,这不是生产代码,因此如果您的查询更高级(多连接),那么您确实希望减少提交的查询数量(选项1)。谢谢,我不做选项一的唯一原因是因为我处理的是数量可变的键。因为我实际上只处理4-8个值,所以我现在可能不会担心它。