Ciao a tutti, da giorni ho una tabella che è cresciuta in modo esponenziale.
Contiene 12.850.000 record ed è composta da un solo campo di tipo text.
Ho creato un ciclo while che effettua delle operazioni ad ogni record letto.
Il grave problema è che ad un certo punto ( ogni volta su record diversi quindi non si può impurate ad un record sporco o a specifiche anomalie del tracciato record) senza segnalare errori esce dal ciclo anticipatamente lasciando così a metà l'opera!
E' come se non ce la facesse con le risorse del server ad eseguire tutto il ciclo.
questo lo script:
Ho usato MYSQLI_USE_RESULT perchè senza non riusciva a caricare la query.Codice PHP:
$query_rst_schede = "SELECT * FROM appo_1_cartelle ";
$dati=mysqli_query($link1, $query_rst_schede, MYSQLI_USE_RESULT) or die("Errore Query - 1");
while($array=mysqli_fetch_array($dati)) {
$carx_codut2 = addslashes(substr($array['campo'],3,2));
$carx_cf = addslashes(substr($array['campo'],81,16));
$carx_codprov = addslashes(substr($array['campo'],58,3));
$carx_codcom = addslashes(substr($array['campo'],61,3));
$carx_emisced = addslashes(substr($array['campo'],64,7));
$query_rst_anagr = "
SELECT anagrafica.ana_codut2, anagrafica.ana_cf, anagrafica.IDana
FROM anagrafica
WHERE anagrafica.ana_codut2 = '$carx_codut2'
AND anagrafica.ana_cf = '$carx_cf'
";
$dati_anagr=mysqli_query($link, $query_rst_anagr) or die("Errore Query - conc");
$array_anagr=mysqli_fetch_assoc($dati_anagr);
$IDana = $array_anagr['IDana'];
mysqli_free_result($dati_anagr);
$query_rst_carte = "
SELECT cartelle.IDCart, cartelle.car_codprov, cartelle.car_codcom, cartelle.car_emisced
FROM cartelle
WHERE cartelle.car_codprov = '$carx_codprov'
AND cartelle.car_codcom = '$carx_codcom'
AND cartelle.car_emisced = '$carx_emisced'
";
$dati_carte=mysqli_query($link, $query_rst_carte) or die("Errore Query - carte");
$array_carte=mysqli_fetch_assoc($dati_carte);
$IDCart = $array_carte['IDCart'];
mysqli_free_result($dati_carte);
if($IDana){
if($IDCart){
$query_rst_re1 = mysqli_query($link, "
UPDATE cartelle
SET
car_host = '1'
WHERE cartelle.car_codprov = '$carx_codprov'
AND cartelle.car_codcom = '$carx_codcom'
AND cartelle.car_emisced = '$carx_emisced'
") or die("Errore query UPDATE cartelle filtro ");
}
}
}
}
mysqli_free_result($dati);
Importante!!! Chiaramente è una procedura batch eseguita da linea di comando DOS.
- Testata su Windows Server 2003 e 2008 con MySql commerciale Enterprise e PHP 5.3.
- Tabella testata sia come MyIsam che Innodb.
- Le tabelle sono tutte indicizzate.
Tutto con lo stesso risultato anomalo.
Grazie anticipatamente. Attendo con ansia