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:
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.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%'
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
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)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
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 !

(ma purtroppo ne ho bisogno e non ho trovato un'equivalente soluzione con MATCH () AGAINST ().. con indice fulltext)
Rispondi quotando
