MySQL数据库复制速度加快


Copying MySQL Database Speed up?

我有一个MySql数据库,只有3000多万行,但其中一些行(大约300万行)是重复的。我正在使用下面的php脚本复制数据库并检查重复项,但它运行非常慢,花了3天时间,甚至还没过半,有什么办法可以加快它的速度吗?我正在MySql服务器上运行该脚本。

    <?php
$dbhost = "localhost" ;

$con = mysql_connect("$dbhost","$dbuser","$dbpass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("$dbame", $con);
$server_self = $_SERVER['PHP_SELF'];
$rows_per_page = 1000;
$dbname_var = post1;


//paging script
$query = "SELECT count(*) FROM $dbname_var";         //change!!
//paging script

//PAGING SCRIPT
if (isset($_GET['pageno'])) {
   $pageno = $_GET['pageno'];
} else {
   $pageno = 1;
} // if

$resulta = mysql_query($query) or trigger_error("SQL", E_USER_ERROR);
$query_data = mysql_fetch_row($resulta);

$numrows = $query_data[0];
$lastpage      = ceil($numrows/$rows_per_page);
$pageno = (int)$pageno;
if ($pageno > $lastpage) {
   $pageno = $lastpage;
} // if
if ($pageno < 1) {
   $pageno = 1;
} // if
$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;
$nextpage = $pageno+1;
$prevpage = $pageno-1;



$result = mysql_query("SELECT * FROM $dbname_var $limit");
while($row = mysql_fetch_array( $result )) {

$as = $row[1];
$ad = $row[2];
$af = $row[10];
//CHECK IF THE ROW ALREADY EXISTS IN THE TABLE
$resultdb1 = mysql_query("SELECT * FROM post_final WHERE
add1='$as' AND
add2='$ad' AND
add10='$af'");
$num_rowsdb1 = mysql_num_rows($resultdb1);
//IF IT DOSENT ADD IT!
if($num_rowsdb1 < 1) {
mysql_query("INSERT INTO post_final (add1,
 add2,
 add3,
 add4,
 add5,
 add6,
 add7,
 add8,
 add9,
 add10)
VALUES ('$row[1]',
 '$row[2]',
 '$row[3]',
 '$row[4]',
 '$row[5]',
 '$row[6]',
 '$row[7]',
 '$row[8]',
 '$row[9]',
 '$row[10]')");
} }



$nxt = $_GET['pageno'] + 1;

if ($_GET['pageno'] < $lastpage) {
print "<BODY>
<script type='"text/javascript'">
<!--
window.location = '"/addnew.php?pageno=$nxt&lastpage=$lastpage'"
//-->
</script>
</BODY>
</HTML>'n";  }
?>
#   Column  Type    Collation   Attributes  Null    Default Extra   Action
 1  ID  int(10)         No  None    AUTO_INCREMENT    Change      Drop   More 
 2  add1    varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
 3  add2    varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
 4  add3    varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
 5  add4    varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
 6  add5    varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
 7  add6    varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
 8  add7    varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
 9  add8    varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
 10 add9    varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
 11 add10   varchar(50) latin1_german2_ci       No  None          Change      Drop   More 
Action  Keyname Type    Unique  Packed  Column  Cardinality Collation   Null    Comment
 Edit    Drop   PRIMARY BTREE   Yes No  ID  10044279    A       
 Edit    Drop   add10   BTREE   No  No  add10   590839  A       
 Edit    Drop   add1    BTREE   No  No  add1    264323  A       
 Edit    Drop   add2    BTREE   No  No  add2    233587  A

只使用SQL,不需要在SQL和PHP之间来回获取数据。假设您有一个数据库db1和表post_final,创建数据库db2创建空的post_final表并执行

INSERT INTO `db2`.`post_final` (add1, add2, ...., add10) 
SELECT DISTINCT add1, add2, ... , add10 FROM `db1`.`post_final`