Mysql
 sql >> Database >  >> RDS >> Mysql

Un modo per evitare un filesort quando order by è diverso dalla clausola where?

Nota che il termine MySQL filesort non significa necessariamente che scriva sul disco. Significa solo che verrà ordinato senza utilizzare un indice. Se il set di risultati è sufficientemente piccolo, MySQL lo ordinerà in memoria, che è di ordini di grandezza più veloce dell'I/O del disco.

Puoi aumentare la quantità di memoria allocata da MySQL per i filesort in memoria utilizzando sort_buffer_size variabile server. In MySQL 5.1, la dimensione predefinita del buffer di ordinamento è 2 MB e il massimo che puoi allocare è 4 GB.

aggiornamento: Per quanto riguarda il commento di Jonathan Leffler sulla misurazione della durata dell'ordinamento, puoi imparare a utilizzare SHOW PROFILE FOR QUERY che ti darà la ripartizione di quanto tempo impiega ogni fase di esecuzione della query.