Domanda

Attualmente, sto confrontando due set di dati, che contengono combinazioni di generazione di StoreKey/ProductKey uniche.

Il 1st Data Set ha le combinazioni di generatori di generazione esclusiva per le vendite tra il gennaio 2012 e la fine del maggio 2014 (risultato= 450k linee).Il 2 ° set di dati ha le combinazioni StoreKey/ProductKey uniche, per le vendite iniziano a giugno 2014, fino ad oggi (risultato= linee 190k).

Sto cercando di trovare le combinazioni StoreKey/ProductKey che si trovano nel 2 ° set, ma non nel 1 ° set - I.e. Nuovi prodotti venduti dall'inizio di giugno.

Fino ad ora, ho scaricato i due set di dati nelle tabelle TEMP, ha creato indici per entrambe le tabelle su entrambi i tasti e utilizzata l'istruzione StoreKey/ProductKey per trovare elementi unici.

Qual è il modo più efficace per confrontare tali set di dati di grandi dimensioni? C'è un modo più efficiente di fare questo tipo di grande confronto?

È stato utile?

Soluzione

L'uso eccetto è a mio avviso il modo di andare qui, ma potresti voler riconsiderare l'uso della tabella temporanea.In tal modo, stai esprimendo efficacemente i tuoi dati in memoria, che ti rallentano.Se gli indici necessari esistono sulle tabelle di origine (come sospetto), basta confrontare le selezioni appropriate:

SELECT StoreKey,ProductKey FROM table WHERE sales BETWEEN date1 AND date2
EXCEPT
SELECT StoreKey,ProductKey FROM table WHERE sales BETWEEN date3 AND date4
.

Altri suggerimenti

Se hai familiarità con gli algoritmi (complessità Big-O), l'esecuzione di questo confronto è al meglio o (n log (n)).L'algoritmo più efficiente ordinerà sia i set di dati, quindi effettuare un flusso di fusioni in parallelo per trovare i tasti corrispondenti (o ineguagliabili).La maggior parte degli ottimizzatori RDBMS lo farà automaticamente per te quando si utilizza EXCEPT o MINUS.Il tuo programma di spiegazione confermerà o disconferò.Se vedi anelli nidificati, stai facendo o (n ^ 2), non così efficiente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top