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

时间:2010-10-02 16:06:55

标签: php mysql database performance

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

我使用$keys = array_keys($_POST)

获取表单发布的输入键

根据数据库字段更新我想做类似的事情

foreach($keys as $key){
    $data = $this->input->post($key);
    $this->db->query("Update $table SET '$key'='$data' WHERE user_id='$the_user->id'");  }

(这不是生产代码,只是试图说明我的问题,因此没有逃避,验证等......)

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

编辑:抱歉不打算听起来像是或不是问题,显然如果是或否,答案是肯定的,但我正在寻找更多的阻碍性能的程度?

1 个答案:

答案 0 :(得分:0)

您发布了多个更新,而不是一个。 性能影响不太可能在你的php循环中,而在数据库连接中更多;因此,最大限度地减少应用程序和数据库之间的交易量将提高性能。

您可以尝试:

  1. 在提交之前构建您的SQL字符串:

    UPDATE <table> SET key1=data1, key2=data2, key3=data3 WHERE user_id=<user>
    
  2. 在同一事务中执行多个更新:

    $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>;"
    );
    
  3. 我不确定PHP / MySQL如何处理第二个选项。 Perl / Postgres可以做到。另外,我认为第一种选择会更快。

    另一件需要考虑的事情是,如果您为多个用户执行此操作,则使用IN(例如WHERE user_id IN ($user_list),其中$ user_list是{{1}格式的用户字符串})。