Rendere più veloce questa query

di melixo il
3 risposte
Ciao a tutti
Qualcuno potrebbe aiutarmi a strizzare il più possibile queste operazioni e renderle più veloci?
Perché non riesco a spremerle di più.
Considerando che, prima di averne avuto conoscenza, ho iniziato senza usare il GROUP BY (lasciamo perdere...)

Il codice funziona come voglio, ma è lento se su tante righe.

Io ho 100 righe, divise per gruppi (gruppo 1 da 5 righe, gruppo 2 da 10 righe e così via)
ogni riga ha una colonna link, in cui può esserci o no un link
devo ottenere una lista di quei gruppi che hanno tutti i link per ogni loro riga, e se così non fosse una lista di link mancanti per ogni gruppo

Il codice qui sotto funziona tutto, ma è troppo lungo... considerando che è una pagina da richiamare 1 volta ogni 5 secondi con un setInterval

Se qualcuno mi dà un consiglio su dove andare a parare nel manuale per risolvere tutto questo gliene sarei grato...
anche perché ho cercato di capire come usare magari un COUNT, o EXCEPT o TRANSICTION, le ho capite secondo gli esempi, ma non riesco a usarle e combinarle tra di loro in questo contesto per arrivare allo stesso risultato


if(isset($_GET["check_upload"])){
	$elenco = array();
	$CATEGORIA = "Fumetti";
	$DATA = "2020-01-02";
	if(mysqli_num_rows($result = mysqli_query($mysqli_connection, "SELECT * FROM foto WHERE categoria = '$CATEGORIA' AND cartella_locale = '$DATA' AND link IS NOT NULL GROUP BY gruppo ORDER BY percorso ASC"))>0){
		while($riga = mysqli_fetch_assoc($result)){
			if(mysqli_num_rows($result1 = mysqli_query($mysqli_connection, "SELECT link FROM foto WHERE categoria = '$CATEGORIA' AND cartella_locale = '$DATA' AND gruppo = '{$riga['gruppo']}' AND link IS NOT NULL"))==mysqli_num_rows($result2 = mysqli_query($mysqli_connection, "SELECT * FROM foto WHERE categoria = '$CATEGORIA' AND cartella_locale = '$DATA' AND gruppo = '{$riga['gruppo']}'"))){
				//TUTTE LE RIGHE DEL GRUPPO HANNO IL LINK
				$elenco[] = $riga["gruppo"]; 
			}else{
				$n = mysqli_num_rows($result_diff = mysqli_query($mysqli_connection, "SELECT * FROM foto WHERE categoria = '$CATEGORIA' AND cartella_locale = '$DATA' AND gruppo = '{$riga['gruppo']}' AND link IS NULL ORDER BY percorso ASC"));
				while($riga_diff = mysqli_fetch_assoc($result_diff)){
					$elenco[] = $riga["gruppo"]."_".$riga_diff["nome_foto"]; 
				}
			}
		}
	}
	echo '<pre>'; print_r($elenco);

3 Risposte

  • Sono SEMPLICI select.
    NON E' QUI che puoi migliorare il codice, ma NEL DATABASE
  • In che senso devo migliorare nel database?
  • Nel senso di ottimizzare almeno le query aggiungendo eventualmente
    indici se mancanti (vedi piano di esecuzione delle query)

    Potresti anche valutare se caricare interamente in memoria la/le tabelle che ti interessano
    a seconda della ram che hai disponibile
Devi accedere o registrarti per scrivere nel forum
3 risposte