PDA

View Full Version : [MySql] Dubbio sulle performance delle query


Helldron
15-12-2010, 13:28
Ciao a tutti,
può sembrare una domanda banale ma quando faccio un query su una tabella con moltissimi record mi capita di vedere, alla fine della tabella, che estrae i risultati in tempi del tipo 0.83 sec quando magari ci ha messo circa 5 minuti o giù di lì.

Premetto che sto usando un indice sulla query e quindi dovrebbe essere più veloce (e sottolineo dovrebbe), ma quel numero 0.83 a cosa si riferisce esattamente??

oNaSsIs
15-12-2010, 21:51
Premesso che 5 minuti mi sembrano un pò troppi, in alcuni casi succede che se la query estrae un numero di record molto grande capita che effettivamente l'operazione venga eseguita nel tempo specificato, ma per stampare i risultati invece ci metta un bel pò per motivi di bufferizzazione. Anche se ti ripeto 5 minuti per stampare un risultato mi sembrano eccessivi, quanti record ottieni in output?

cdimauro
16-12-2010, 04:35
Servirebbe almeno vedere la query.

Ho il non vago sospetto che si faccia uso di una subselect (con IN), dove MySQL mostra il "meglio" di sé: tante volte non riesce a ottimizzarla, e genera... table scan a ogni iterazione... :muro:

Helldron
16-12-2010, 09:51
ho 100.000 record in una tabella, uso explain e mi dice che usa gli indici, se non lo fa lo forzo io, giusto per vedere che succede.

Per la query niente di complicato ho qualcosa del tipo
select sql_no_cache matricola, nome, cognome,
stipendio
from Personale
where stipendio between 800 and 1000
order by stipendio desc;

Questa query con l' indice su stipendio mi fa 0.17 sec, senza 0.12 sec. Forse dipende da altre cose lo scarso risultato dell'uso dell' indice, il punto allora è quello che estrae i risultati in quel tempo ma per stamparli su schermo ci mette qualche minuto, da quanto mi avete detto.

Cmq la mia base di dati non sembra beneficiare molto degli indici (senza i riusltati sono abbastanza soddisfacenti), farò altre prove!!

cdimauro
16-12-2010, 20:23
Senza dubbio il collo di bottiglia sia rappresentato dalla visualizzazione.

Quanto agli indici, vanno messi se il campo interessato discrimina il più possibile i dati. Per essere chiari, se i valori distinti sono pochi, allora non ne vale la pena e rappresenta, anzi, un costo più (inserimento, modifica e cancellazione; nelle select anche, dal momento che deve prima cercare nell'indice, e poi comunque caricare parecchie pagine coi record).