samo da razjasnim "executing" vs "sending data" posto je to vrlo cesto pitanje kada je mysql u pitanju i vrlo nejasno objasnjeno u dokumentaciji .. nadam se da ce ovo moje objasnjenje da bude malo jasnije
executing stage je stage u kome mysql, ako ima potrebe, kreira temp tabele
sending data stage je stage u kome mysql cita datu, filtrira slogove i salje ih klijentu (zato se zove sending.. posto mi cim nadjemo finalni slog odma ga saljemo klijentu)
scenario1:
select * from xyz;
dakle nema potrebe za nikakvim temp tabelama etc .. saljemo celu tabelu xyz. executing stage ne radi nista, traje 0.00.., sending data stage traje koliko treba da se procita tabela xyz sa diska i posalje sadrzaj iste na klijent. dakle skoro ceo execution time se nalazi u "sending data"
scenario2:
select * from xyz where nj = 7;
opet nema potrebe za nikakvim temp tabelama etc .. executing stage ne radi nista, traje 0.00.., sending data stage prolazi kroz tabelu (celu ako nj nije indexiran, samo kroz index ako je indexiran) i salje slogove kako nailazi na njih na klijent. dakle skoro ceo execution time se nalazi u "sending data"
scenario3:
select sum(x) from xyz where nj = 7;
opet ista prica kao scenario2, opet se sve nalazi u sending data
scenario4:
select sum(x) from xyz group by z;
e sad mysql mora da kreira temp tabelu, kreiranje temp tabele (citanje xyz tabele, sabiranje x po z) se desava u executing stage-u, kada se to zavrsi krece sending data stage koji sada cita tu temp tabelu i salje je na klijenta
scenario5:
select sum(x) as nj from xyz group by z having nj > 10;
isto kao s4 osim sto se nj > 10 deo izvrsava u sending data
nadam se da je malo jasnije