È possibile iniziare tentando di rimuovere il test IS NOT NULL, che è implicitamente rimosso da COUNT sul campo. Sembra anche che tu voglia omettere 25695 da match_keywords
, altrimenti 25695 (o altro) verrebbe sicuramente visualizzato come la "migliore" corrispondenza entro il limite di 11 righe?
SELECT match_keywords.padid,
COUNT(match_keywords.word) AS matching_words
FROM keywords current_program_keywords
INNER JOIN keywords match_keywords
ON match_keywords.word = current_program_keywords.word
WHERE current_program_keywords.padid = 25695
GROUP BY match_keywords.padid
ORDER BY matching_words DESC
LIMIT 0, 11
Quindi, pensa a come lo faresti come persona.
- Si sarebbe iniziare con un padid (25695) e recuperare tutte le parole per quel padid
- Da quelli elenco di parole, tornare indietro nella tabella di nuovo e per ogni parola corrispondente, ottenere il loro padid (presume di avere alcun duplicato
padid + word
)
- gruppo del padid insieme e contarli
- ordine i conti e tornare il più alto 11
Con la vostra lista di 3 sepa tasso di indici a colonna singola, i primi due passaggi (entrambi coinvolgono solo 2 colonne) dovranno sempre passare dall'indice ai dati per ottenere l'altra colonna. Coprendo indici può aiutare qui - a creare due indici compositi per testare
create index ix_keyword_pw on keyword(padid, word);
create index ix_keyword_wp on keyword(word, padid);
Con questi indici compositi in atto, è possibile rimuovere gli indici di colonna singola su padid
e word
poiché essi sono coperti da questi due.
Nota: Devi sempre temperare le prestazioni SELECT
- dimensioni degli indici (più si crea più di memorizzare)
- inserto/prestazioni di aggiornamento (i più indici, più tempo ci vuole per commit dal momento che deve aggiornare i dati, quindi aggiornare tutti gli indici)
chiarimenti richiesti: si dice simile, ma nella query si utilizza 'ON match_keywords.word = current_program_keywords.word' significa entrambe le parole sono le stesse. Ora, se record # 25695.word = 'aaa', la query restituirà' n' righe che hanno word = 'aaa' ... il gruppo BY e ORDER BY non ha alcun senso. 'N 'è l'unica variabile a cui sei interessato? –
Simile, anno in quanto corrisponde a quante più parole possibile e fornisce un conteggio del maggior numero di corrispondenze, l'ordinamento su che fornisce i record più simili. – Jules