我目前正在使用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'"); }
(这不是生产代码,只是试图说明我的问题,因此没有逃避,验证等......)
我的问题是,通过对提交的每个单独的表单数据运行单独的查询,这是否会造成性能问题?
编辑:抱歉不打算听起来像是或不是问题,显然如果是或否,答案是肯定的,但我正在寻找更多的阻碍性能的程度?
答案 0 :(得分:0)
是
您发布了多个更新,而不是一个。 性能影响不太可能在你的php循环中,而在数据库连接中更多;因此,最大限度地减少应用程序和数据库之间的交易量将提高性能。
您可以尝试:
在提交之前构建您的SQL字符串:
UPDATE <table> SET key1=data1, key2=data2, key3=data3 WHERE user_id=<user>
在同一事务中执行多个更新:
$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>;"
);
我不确定PHP / MySQL如何处理第二个选项。 Perl / Postgres可以做到。另外,我认为第一种选择会更快。
另一件需要考虑的事情是,如果您为多个用户执行此操作,则使用IN
(例如WHERE user_id IN ($user_list)
,其中$ user_list是{{1}格式的用户字符串})。