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

    [MySql] - join con: group by o subselect ?

    Ciao a tutti,

    ho tre tabelle:

    [fascicoli] (26mila record)
    idFascicolo int, PK
    oggetto varchar, index

    [richiedenti] (21mila record)
    idRichiedente int, PK
    richiedente varchar, index

    [fascicoli_richidenti] (32mila record)
    id int, PK
    idFascicolo int, index, FK
    idRichiedente int, index FK


    la mia query di ricerca è questa:

    codice:
    SELECT
    richiedenti.richiedente,
    fascicoli.idFascicolo,
    fascicoli.oggetto
    FROM un_fascicoli_richiedenti
    JOIN fascicoli ON (fascicoli_richiedenti.idFascicolo=fascicoli.idFascicolo)
    JOIN richiedenti ON (fascicoli_richiedenti.idRichiedente=richiedenti.idRichiedente)
    WHERE richiedenti.richiedente LIKE '%stringa%'
    ora, per lo stesso fascicoli, potrei avere 2 richiedenti (che ne so .. tipo fratello e sorella) che avendo lo stesso "cognome" nel risultato della query mi producono 2 righe, per lo stesso fascicolo.

    Nel risultato della select, vorrei ottenere, una sola riga per fascicolo, quindi, prima ho aggiunto DISTINCT (come segue.. ) ma non funziona:

    codice:
    SELECT
    DISTINCT fascicoli_richiedenti.idFascicolo,
    richiedenti.richiedente,
    fascicoli.idFascicolo,
    fascicoli.oggetto
    FROM un_fascicoli_richiedenti
    JOIN fascicoli ON (fascicoli_richiedenti.idFascicolo=fascicoli.idFascicolo)
    JOIN richiedenti ON (fascicoli_richiedenti.idRichiedente=richiedenti.idRichiedente)
    WHERE richiedenti.richiedente LIKE '%stringa%'

    alla fine ho optato per GROUP BY


    codice:
    SELECT
    richiedenti.richiedente,
    fascicoli.idFascicolo,
    fascicoli.oggetto
    FROM un_fascicoli_richiedenti
    JOIN fascicoli ON (fascicoli_richiedenti.idFascicolo=fascicoli.idFascicolo)
    JOIN richiedenti ON (fascicoli_richiedenti.idRichiedente=richiedenti.idRichiedente)
    WHERE richiedenti.richiedente LIKE '%stringa%'
    GROUP BY fascicoli_richiedenti.idFascicolo
    
    così la query funziona, da phpMyAdmin vedo che group by mi rallenta molto il tempo di esecuzione (da 0.0057 secondi senza group by a 0.0527 secondi utilizzando group by)

    la mia domanda è:

    c'è un modo più corretto (e di conseguenza più performante) di scrivere la SELECT, rispetto all'ultima versione che ho scritto?

    E comunque ho notato che:

    0.0057 secondi: .. WHERE richiedenti.richiedente LIKE '%stringa%'
    0.0527 secondi: .. WHERE richiedenti.richiedente LIKE '%stringa%' GROUP BY fascicoli_richiedenti.idFascicolo
    0.0036 secondi: .. WHERE richiedenti.richiedente LIKE 'stringa%' GROUP BY fascicoli_richiedenti.idFascicolo

    a questo punto non so nemmeno capire se la lentezza della select è causato dal GROUP BY o dalla ricerca LIKE '%stringa%' (ma purtroppo ne ho bisogno e non ho trovato un'equivalente soluzione con MATCH () AGAINST ().. con indice fulltext)

    qualche consiglio?!
    intanto grazie a tutti per la pazienza e per il supporto !
    Ultima modifica di aquatimer2000; 16-04-2019 a 09:55
    aquatimer2000

  2. #2
    tutti e due: più è generica la LIKE, più risultati hai in uscita, più info hai da raggruppare, più vai piano

  3. #3
    Quote Originariamente inviata da optime Visualizza il messaggio
    tutti e due: più è generica la LIKE, più risultati hai in uscita, più info hai da raggruppare, più vai piano
    c'è un modo per rimuovere i duplicati utilizzando WHERE al posto di GROUP BY ?!
    aquatimer2000

  4. #4

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    non che io sappia
    ok, quindi in linea di massima, la query è scritta bene, poi naturalmente i risultati dipenderanno dalla "precisione" della ricerca..

    l'importante è che l'istruzione sql sia corretta !

    ovvio che farò attenzione ad utilizzare .. LIKE '%stringa%' solo quando strettamente necessario.
    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.