Rendere più veloce questa query

di il
3 risposte

Rendere più veloce questa query

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

  • Re: Rendere più veloce questa query

    Sono SEMPLICI select.
    NON E' QUI che puoi migliorare il codice, ma NEL DATABASE
  • Re: Rendere più veloce questa query

    In che senso devo migliorare nel database?
  • Re: Rendere più veloce questa query

    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