prova prima a ottimizzare i tuoi script. Prima di tutto, non eseguire mai query singole durante l'importazione a meno che tu non abbia altra scelta, il sovraccarico della rete può essere un killer.
Prova qualcosa del tipo (ovviamente non testato e codificato nella casella di testo SO, controlla che le parentesi corrispondano ecc.):
$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);
}
Gioca con il numero in array_chunk, troppo grande e potrebbe causare problemi come la query troppo lunga (sì, c'è un limite configurabile in my.cnf), troppo piccolo e il suo sovraccarico non necessario.
Potresti anche eliminare l'uso di assegnare $data[x] alle variabili poiché è uno spreco dato quanto è piccolo lo script, basta usare $data[x] direttamente nella tua query e.c.t. (non darà un enorme miglioramento, ma a seconda delle dimensioni dell'importazione potrebbe risparmiare un po').
La prossima cosa sarebbe usare inserimenti/aggiornamenti a bassa priorità, controlla questo per maggiori informazioni su questo per iniziare:Come dare priorità a determinate query?
dopo tutto ciò, potresti pensare all'ottimizzazione della configurazione di mysql, ma questa è una cosa che Google può spiegare davvero perché le impostazioni migliori sono diverse per tutti e per le loro situazioni uniche
Modifica: Un'altra cosa che ho fatto in precedenza è che se hai impostato molte chiavi che non sono necessarie per l'importazione, puoi rilasciare quelle chiavi temporaneamente e aggiungerle di nuovo al termine dello script. Questo può anche produrre buoni miglioramenti temporali, ma poiché stai lavorando su un database live ci sono delle insidie da aggirare se segui quella strada.