Php 如何在更短的时间内更新我的sql数据库中的1000000个数据?

Php 如何在更短的时间内更新我的sql数据库中的1000000个数据?,php,Php,我需要在mysql数据库中更新和插入大约100万个数据,当我使用下面的代码时需要更多的时间。请建议如何快速更新和插入数据 include('db.php'); include('functions.php'); $functions=new functions(); set_time_limit(0); $column="rank"."_".date("Y-m-d"); $count=$functions->get_row("SELECT COUNT(id) as ct FROM a

我需要在mysql数据库中更新和插入大约100万个数据,当我使用下面的代码时需要更多的时间。请建议如何快速更新和插入数据

include('db.php');
include('functions.php');
$functions=new functions();
 set_time_limit(0);
 $column="rank"."_".date("Y-m-d");
 $count=$functions->get_row("SELECT COUNT(id) as ct FROM alexa_filename WHERE status=1");
 if($count->ct==100){
      $alexas=$functions->get_result("SELECT DISTINCT (`sitename`),`$column` FROM `top-2m` WHERE  `status`=0 LIMIT 100" );
      if(!empty($alexas)){
          foreach($alexas as $alexa){
              $site_name=$alexa->sitename;
              echo $site_name;
              $rank=$alexa->$column;
              $table=$functions->find_table_name($site_name);
              $count=$functions->get_row("SELECT COUNT(site_name) as ct FROM `$table` WHERE site_name='$site_name'");
              if($count->ct==0){
                    $functions->set_query("INSERT INTO `$table`( `site_name`, `other_id`, `response`, `category`, `updated`, `site_update`, `wot_update`, `social_update`,                                                                    `google_update`, `server_update`, `alexa_update`, `backlinks_update`, `antivirus_update`, `key`, `desc`, `google_backlink`, `images_url`,                                                                                                                         `images`, `tag`, `view_count`, `title`, `api_update_time`, `table_name`, `user_added_similar`, `auto_similar`, `comments`, `status`) VALUES                                                                    ('$site_name',0,0,0,0,0,0,0,0,0,$rank,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)");
                $functions->set_query("UPDATE `top-2m` SET `status`=1 WHERE sitename ='$site_name'");
              }else{
                 $functions->set_query("UPDATE  `$table` SET `alexa_update`=$rank WHERE site_name='$site_name'");     
                  $functions->set_query("UPDATE `top-2m` SET `status`=2 WHERE sitename ='$site_name'");
              }
          }
      }else{
          mail("aaa@aaa.com","Alexa_Cron_Update_Status","aaaRank Is Succes fully Updated");
      }
 }
  • 可以使用插入/更新多行
  • 重新建立数据库索引
  • 使用准备好的Mysql语句
  • 如果您使用的是Linux/ubuntu,请尝试使用终端而不是浏览器。这会有很大的不同
      • 可以使用插入/更新多行
      • 重新建立数据库索引
      • 使用准备好的Mysql语句
      • 如果您使用的是Linux/ubuntu,请尝试使用终端而不是浏览器。这会有很大的不同
      将插入和更新查询连接到$qry并应用

      $functions->set_query($qry);
      
      一旦你的循环完成。这将花费更少的时间

      编辑:

      例如:

      $qry = "Insert into table values('', '', '','', '')"; 
      $qry .= "insert into table2 values('', '', '','', '')"; 
      $qry .= "insert into table3 values('', '', '','', '')"; 
      $qry .= "update table3 set field = 'something' "; 
      
      和不正常或循环

      $functions->set_query($qry);
      

      将插入和更新查询连接到$qry并应用

      $functions->set_query($qry);
      
      一旦你的循环完成。这将花费更少的时间

      编辑:

      例如:

      $qry = "Insert into table values('', '', '','', '')"; 
      $qry .= "insert into table2 values('', '', '','', '')"; 
      $qry .= "insert into table3 values('', '', '','', '')"; 
      $qry .= "update table3 set field = 'something' "; 
      
      和不正常或循环

      $functions->set_query($qry);
      

      你真的应该试着解释你想做什么。你的桌子看起来怎么样?什么是关系?在我看来,你还应该发布
      函数
      类。如果某个函数(如
      get\u row
      每次打开一个新连接)都会减慢程序的速度。@karthikeyen,这与多次插入无关。我想问的是,如何快速高效地完成这项工作。首先,如果需要花费时间来执行数据库,请正确地重新编制数据库索引,并使用准备好的语句。你真的应该试着解释你想做什么。你的桌子看起来怎么样?什么是关系?在我看来,你还应该发布
      函数
      类。如果某个函数(如
      get\u row
      每次打开一个新连接)都会减慢程序的速度。@karthikeyen,这与多次插入无关。我想问的是,如何快速高效地完成这项工作。首先,如果需要花时间执行数据库,请正确地重新编制数据库索引,并使用准备好的语句。@弗雷恩,我像你提到的那样试过了,但它只更新了最后一行,你连接正确吗??我的意思是每个查询必须用分号连接。请参阅答案中的更新,该更新被阻止为已编辑。@Frayne,我已按您所述进行了尝试,但仅更新了最后一行。是否正确连接??我的意思是每个查询必须用分号连接。请参阅答案中的更新,该更新被阻止为已编辑。