Ho una tabella di grandi dimensioni (TokenFrequency) che contiene milioni di righe. La tabella TokenFrequency che è strutturato in questo modo:SQL Alternativa all'esecuzione di un INNER JOIN su una singola tabella
Tabella - TokenFrequency
- id - int, chiave primaria
- fonte - int, estera chiave
- gettone - char
- conteggio - int
Il mio obiettivo è selezionare tutte le righe in cui due sorgenti hanno lo stesso token. Per esempio, se la mia tabella si presentava così:
id --- --- fonte di token --- contare
1 ------ 1 --------- dog - ----- 1
2 ------ 2 --------- cat -------- 2
3 ------ 3 ----- ---- cat -------- 2
4 ------ 4 --------- pig -------- 5
5 ---- - 5 --------- zoo ------- 1
6 ------ 5 --------- gatto -------- 1
7 ------ 5 --------- maiale -------- 1
Vorrei una query SQL per darmi l'origine 1, l'origine 2 e la somma dei conteggi. Ad esempio:
sorgente1 --- sorgente2 --- gettone --- contare
---- 2 ----------- 3 --------- gatto -------- 4
---- 2 ----------- 5 --------- gatto -------- 3
---- 3 ----------- 5 --------- cat -------- 3
---- 4 ------- ---- 5 --------- -------- maiale 6
ho una domanda che assomiglia a questo:
SELECT F.source AS source1, S.source AS source2, F.token,
(F.count + S.count) AS sum
FROM TokenFrequency F
INNER JOIN TokenFrequency S ON F.token = S.token
WHERE F.source <> S.source
Questa query funziona bene, ma i problemi che ho con esso sono che:
- Ho una tabella TokenFrequency che ha milioni di righe e quindi hanno bisogno di un alternativa più veloce per ottenere questo risultato.
- La query corrente che ho sta dando dei duplicati. Per esempio la sua selezione:
source1 = 2, sorgente2 = 3, di token = gatto, count = 4
source1 = 3, sorgente2 = 2, del token = gatto, count = 4
che non è troppo di un problema ma se c'è un modo per elitarli e ottenere un aumento di velocità allora sarebbe molto utile
Il problema principale che ho è la velocità della query con la mia query corrente ci vogliono ore per completare. L'INNER JOIN su un tavolo è quello che ritengo essere il problema. Sono sicuro che ci deve essere un modo per eliminare il join interno e ottenere risultati simili usando solo un'istanza della tabella TokenFrequency. Il secondo problema che ho menzionato potrebbe anche promuovere un aumento di velocità nella query.
Ho bisogno di un modo per ristrutturare questa query per fornire gli stessi risultati in modo più rapido ed efficiente.
Grazie.
È possibile pubblicare la DOMANDA della query (http://dev.mysql.com/doc/refman/5.0/en/explain.html). Aiuterà la gente a vedere come possono aiutarti a ottimizzare. –
è necessario fornire alcune informazioni sull'indice, quali colonne, ecc. –
Ecco la mia ESPLINA della query che ho inizialmente pubblicato. id: 1, select_type: SEMPLICE, tabella: F & S, tipo: ALL, Possible_keys: NULL, Chiave: NULL, Key_len: NULL, ref: NULL, righe: 8, Extra: Utilizzo di dove; Utilizzo del buffer di join Ci sono due righe restituite l'unica differenza sono i due nomi di tabella F e S. – cruzja