0
나는 3 천만개가 넘는 행이있는 MySQL 데이터베이스를 가지고 있지만 일부 행 (적절하게 3 백만)은 중복되어 있습니다. 아래의 PHP 스크립트를 사용하여 데이터베이스를 복사하고 중복을 확인하려고합니다. 그러나 실행 속도가 매우 느립니다. 3 일 그리고 그것의 반 방법 저쪽에, 어쨌든 그것을 가속화하기 위하여 거기 있는가? 나는 MySql 서버 자체에서 스크립트를 실행하고있다.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
준비된 문을 빈
post_final
테이블을 생성 할 만듭니다. 하지만 어쨌든 일반 SQL을 사용하여이 작업을 수행 할 수 있습니다. – Rufinus가장 먼저해야 할 일은 1000 개의 레코드마다 브라우저 요청을 사용하는 것입니다. 두 번째 방법은 모든 레코드에 대해 개별적으로 쿼리를 실행하지 않고이를 수행하는 방법을 찾는 것입니다. – horatio