Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    sort array multidimensionale

    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:

    Codice PHP:

    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 ?
    aquatimer2000

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2019
    residenza
    Sicilia
    Messaggi
    48
    Fai tutto lato MySQL!

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

  3. #3
    Quote Originariamente inviata da Flaviors200 Visualizza il messaggio
    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.
    aquatimer2000

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.