PDA

Visualizza la versione completa : sort array multidimensionale


aquatimer2000
23-04-2019, 18:14
Ciao a tutti, nel mio applicativo eseguo delle query che come risultato solitamente producono diverse centinaia di righe.

Volendo ottimizzare la velocitÓ dell'esecuzione delle query, ho letto in giro, che sarebbe utile evitare di far fare il GROUP BY e il SORTING a MySql, e di farlo lato applicativo, una volta ricavato il resultset.

Prima di tutto tutto vi chiedo se quanto ho letto in giro corrisponde al vero o meno.

Potrei fare delle query di test, ma Ŕ ovvio che query senza sort o senza group by saranno di certo pi¨ veloci di query che "sortano" o "gruppano"

Altra richiesta:
per fare il groupby ho scritto una funzione apposita, che mi ritorna il resultset gruppato.

Per il sort, utilizzo:




array_multisort( array_column($arrayGroupBy, "colonnaDaSortare"), SORT_ASC, $arrayGroupBy );



Voi che ne pensate, abbandono tutto e lascio fare queste cose a MySql, oppure utilizzo questi script lato php ?

Flaviors200
23-04-2019, 20:05
Fai tutto lato MySQL!

Ad ogni modo quanto impiega la query ad essere eseguita che senti la necessitÓ di ottimizzarla?

aquatimer2000
23-04-2019, 20:35
Fai tutto lato MySQL!

Ad ogni modo quanto impiega la query ad essere eseguita che senti la necessitÓ di ottimizzarla?

ricerca con: ..WHERE tab_x.nome LIKE '%stringa%' GROUP BY tab.id ORDER BY tab.id: 0,6086 secondi
ricerca con: .. WHERE tab_x.nome LIKE '%stringa%' : 0,4731 secondi

risultati letti da PhpMyAdmin.

Se ricerco con:
WHERE tab_x.nome=LIKE 'stringa%' GROUP BY tab.id ORDER BY tab.id
oppure con:
WHERE tab_x.nome='stringa' GROUP BY tab.id ORDER BY tab.id

la velocitÓ della query torna vicino a 0,0055 secondi

Ovvio, cerco di utilizzare le ricerche LIKE '%stringa%' (per i problemi di ricerca con indice btree sul campo tab_x.nome) solo quando necessario, ma se l'utente vuole, pu˛ scegliere anche questo tipo di ricerca.

La select fa delle JOIN tra 4 tabelle e delle LEFT JOIN su altre 3 tabelle
Tabelle innodb, con foreign key ove necessario, indici su tutti i campi di ricerca e sui campi oggetto di join.

dimensione media delle 7 tabelle: 20mila righe ognuna.

Loading