försök att optimera dina skript först. För det första, kör aldrig enstaka frågor när du importerar såvida du inte har något annat val, nätverkskostnaderna kan vara en mördare.
Prova något i stil med (uppenbarligen oprövad och kodad i SO-textrutan, kontrollera att parenteser matchar e.c.t.):
$url = 'http://www.example.com/directory/file.csv';
if (($handle = fopen($url, "r")) !== FALSE)
{
fgetcsv($handle, 1000, ",");
$imports = array();
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$EvID = $data[0];
$Ev = $data[1];
$PerID = $data[2];
$Per = $data[3];
$VName = $data[4];
$VID = $data[5];
$VSA = $data[6];
$DateTime = $data[7];
$PCatID = $data[8];
$PCat = $data[9];
$CCatID = $data[10];
$CCat = $data[11];
$GCatID = $data[12];
$GCat = $data[13];
$City = $data[14];
$State = $data[15];
$StateID = $data[16];
$Country = $data[17];
$CountryID = $data[18];
$Zip = $data[19];
$TYN = $data[20];
$IMAGEURL = $data[21];
$URLLink = $data[22];
$data[7] = strtotime($data[7]);
$data[7] = date("Y-m-d H:i:s",$data[7]);
if((($PCatID == '2') && (($CountryID == '217') or ($CountryID == '38'))) || (($GCatID == '16') or ($GCatID == '19') or ($GCatID == '30') or ($GCatID == '32')))
{
$imports[] = "('".md5($EventID.$PerformerID)."','".addslashes($data[0])."','".addslashes($data[1])."','".addslashes($data[2])."','".addslashes($data[3])."','".addslashes($data[4])."',
'".addslashes($data[5])."','".addslashes($data[6])."','".addslashes($data[7])."','".addslashes($data[8])."','".addslashes($data[9])."',
'".addslashes($data[10])."','".addslashes($data[11])."','".addslashes($data[12])."','".addslashes($data[13])."','".addslashes($data[14])."',
'".addslashes($data[15])."','".addslashes($data[16])."','".addslashes($data[17])."','".addslashes($data[18])."','".addslashes($data[19])."',
'".addslashes($data[20])."','".addslashes($data[21])."')";
}
}
$importarrays = array_chunk($imports, 100);
foreach($importarrays as $arr) {
if(!mysql_query("INSERT IGNORE INTO TNDB_CSV2
(id, EvID, Event, PerID, Per, VName,
VID, VSA, DateTime, PCatID, PCat,
CCatID, CCat, GCatID, GCat, City,
State, StateID, Country, CountryID, Zip,
TYN, IMAGEURL) VALUES ".implode(',', $arr)){
die("error: ".mysql_error());
}
}
fclose($handle);
}
Lek med numret i array_chunk, för stort och det kan orsaka problem som att frågan är för lång (ja det finns en konfigurerbar gräns i my.cnf), för liten och dess onödiga overhead.
Du kan också släppa användningen av att tilldela $data[x] variabler eftersom det är ett slöseri med tanke på hur litet skriptet är, använd bara $data[x] direkt i din fråga e.c.t. (kommer inte att ge en massiv förbättring, men beroende på din importstorlek kan det spara lite).
Nästa sak skulle vara att använda lågprioriterade inlägg/uppdateringar, kolla in det här för mer information om det för att komma igång:Hur prioriterar man vissa frågor?
efter allt detta kan du tänka på mysql-konfigurationsoptimering, men det är en för google att verkligen förklara eftersom de bästa inställningarna är olika för alla och deras unika situationer
Redigera: En annan sak jag har gjort tidigare är om du har många nycklar inställda som inte krävs för importen, kan du släppa dessa nycklar tillfälligt och lägga till dem igen när skriptet är klart. Detta kan också ge bra tidsförbättringar, men eftersom du arbetar med en livedatabas finns det fallgropar att komma runt om du går den vägen.