Originariamente inviato da gianf_tarantino
Scusa Leilond se intervengo, ma non è proprio esattamente così.
Mi spiego meglio con un esempio:

SELECT *
FROM tabella1, tabella2
WHERE (tabella1.campo='Prova')
LIMIT 10

Innanzitutto viene effettuato il "prodtto cartesiano" tra le 2 tabelle, ossia si prendono tutte le combinazioni delle righe della tabella1 * le righe della tabella2. Supponendo che tabella1 ha 4 record e tabella2 ne ha 5 allora il risultato sarà di 20 record.
Poi a queste righe si applica la clausola WHERE con la quale si considerano solo certe righe e non tutte. Supponiamo che delle 20 righe ne rimangano 13. Infine con LIMIT se ne prendono solo 10 le quali costituiranno il cosiddetto Result Set.
Questo NON contraddice quello che ho detto prima io. Ho detto appunto che se la query non ha selezioni efficenti a livello di indici, non c'è modo di usare limit per giovarne
La tua query è sicuramente NON ottimizzabile, poichè non c'è nessun elemento di join che permetta di utilizzare un ordinamento prima dell'estrazione, la qual cosa mi OBBLIGA a prendere tutti gli elementi e poi selezionarne 10
In un esempio che posso fare io, simile al tuo
SELECT * FROM tabella1,tabella2
WHERE tabella1.campo="prova" and tabella2.id = tabella1.id_tabella2
LIMIT 10

Se campo è indice e tabella1 e id è primary key di tabella2, la select scorrerà i record NATURALMENTE fermandosi al decimo elemento utile, poichè non ha alcun bisogno di fare il "prodotto cartesiano" prima dell'esecuzione, ma ha accesso diretto tramite le chiavi

L'indicizzazione risulta offrire dei miglioramenti significativi, quando le ricerche nella tabella riguardano proprio il campo indicizzato.
Nell'esempio che hai fatto:

SELECT * FROM tabella ORDER BY campo LIMIT 10

prima si prendono tutti i record della tabella, poi questi vengono ordinati su "campo" (e questa è un'operazione abbastanza gravosa) e poi, di questi se ne prendono 10.
Se la tabella risulta essere indicizzata su campo, allora l'operazione di ordinamento non prenderà risorse (o comunque molto minimali) per cui la query risulta essere più efficiente.
Qui sono io a contraddire
Se "campo" è indice di tabella, l'estrazione avviene solo per 10 elementi, NON prende tutto e poi ordina

Esiste una fantastica funzione in MYSQL che si chiama EXPLAIN. Ogni volta che si usa un query è buona norma (quando possibile) stamparla, ed usare EXPLAIN per verificare il corretto uso degli indici. Questa funzione (va un po' studiata _QUI_ ) ma se la si usa per bene può dare un vero sprint a qualsiasi applicazione che fa largo uso di sql

P.S.
Consiglio anche questa lettura
http://dev.mysql.com/doc/refman/5.0/...imization.html