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 !