Quando aggiungo LIMIT 1 a una query MySQL, interrompe la ricerca dopo aver trovato 1 risultato (rendendolo così più veloce) o recupera ancora tutti i risultati e alla fine viene troncato?
Quando aggiungo LIMIT 1 a una query MySQL, interrompe la ricerca dopo aver trovato 1 risultato (rendendolo così più veloce) o recupera ancora tutti i risultati e alla fine viene troncato?
Risposte:
A seconda della query, l'aggiunta di una clausola limite può avere un enorme effetto sulle prestazioni. Se si desidera una sola riga (o si sa per certo che solo una riga può soddisfare la query) e non si è sicuri di come verrà eseguita dall'ottimizzatore interno (ad esempio, la clausola WHERE non colpisce un indice e così via), allora dovresti assolutamente aggiungere una clausola LIMIT.
Per quanto riguarda le query ottimizzate (utilizzando gli indici su tabelle piccole) probabilmente non avrà molta importanza in termini di prestazioni, ma ancora una volta, se sei interessato solo a una riga, aggiungi una clausola LIMIT a prescindere.
Il limite può influire sulle prestazioni della query (vedere i commenti e il collegamento sotto) e riduce anche il set di risultati che viene emesso da MySQL. Per una query in cui ti aspetti un unico risultato ci sono dei vantaggi.
Inoltre, limitare il set di risultati può infatti accelerare il tempo totale di query poiché il trasferimento di set di risultati di grandi dimensioni utilizza la memoria e potenzialmente crea tabelle temporanee su disco. Dico questo dato che di recente ho visto un'applicazione che non utilizzava il limite uccidere un server a causa di enormi set di risultati e con il limite in atto l'utilizzo delle risorse è diminuito enormemente.
Controlla questa pagina per maggiori dettagli: MySQL Documentation: LIMIT Optimization
Se viene restituito un solo risultato, no, LIMIT non lo renderà più veloce. Se ci sono molti risultati e hai solo bisogno del primo risultato e non ci sono istruzioni GROUP o ORDER by, LIMIT lo renderà più veloce.
La risposta, in breve, è sì. Se limiti il risultato a 1, anche se "ti aspetti" un risultato, la query sarà più veloce perché il tuo database non esaminerà tutti i tuoi record. Si fermerà semplicemente una volta trovato un record che corrisponde alla tua query.
UNIQUE
(oPRIMARY KEY
) vincolo (o indice) sulla colonna di filtro. stackoverflow.com/questions/8467092/...