2013-10-17 6 views
5

Fa Redshift in modo efficiente (cioè ricerca binaria) trova un blocco di una tabella che è ordinata su una colonna A per una query con una condizione A =?Amazon Redshift Prestazioni del filtro di uguaglianza e tasti di ordinamento

Ad esempio, ci sia una tabella T con ~ 500m righe, ~ 50 campi, distribuiti e ordinati sul campo A. Il campo A ha un'elevata cardinalità - quindi ci sono ~ 4,5 m diversi valori A, con esattamente lo stesso numero di righe in T: ~ 100 righe per valore.
Assumere un cluster redshift con un singolo nodo XL.
Il campo A non è compresso. Tutti gli altri campi hanno una forma di compressione, come suggerito da ANALYZE COMPRESSION. Un rapporto di 1:20 è stato dato rispetto a un tavolo non compresso.

data una query banale:

select avg(B),avg(C) from 
(select B,C from T where A = <val>) 

Dopo VUOTO e analizzare il seguente piano di spiegare è dato:

XN Aggregate (cost=1.73..1.73 rows=1 width=8) 
-> XN Seq Scan on T (cost=0.00..1.23 rows=99 width=8) 
Filter: (A = <val>::numeric) 

Questa query richiede 39 secondi per completare.
La domanda principale è: È questo il comportamento previsto di redshift?

Secondo la documentazione in Choosing the best sortkey:.
"Se fai frequenti filtraggio intervallo o l'uguaglianza filtraggio su una colonna, specificare che colonna come chiave di ordinamento Redshift può saltare la lettura di interi blocchi di dati per quella colonna perché registra i valori minimi e massimi di colonna memorizzata su ciascun blocco e può saltare blocchi che non si applicano alla gamma predicato "

In Choosing sort keys:
". Un'altra ottimizzazione che dipende dai dati ordinata è la gestione efficiente di predicati con limiti di intervallo Amazon Redshift memorizza i dati colonnari in blocchi di 1 MB. I valori minimo e massimo per ciascun blocco sono memorizzati come parte dei metadati. Se una colonna con limiti di intervallo è una chiave di ordinamento, il processore di query è in grado di utilizzare i valori minimo e massimo per saltare rapidamente un numero elevato di blocchi durante le scansioni di tabelle. Ad esempio, se una tabella memorizza cinque anni di dati ordinati per data e una query specifica un intervallo di date di un mese, è possibile eliminare fino al 98% dei blocchi del disco dalla scansione. Se i dati non sono ordinati, è necessario scansionare più blocchi del disco (possibilmente tutti). Per ulteriori informazioni su queste ottimizzazioni, vedere Scelta delle chiavi di distribuzione. "

questioni secondarie:?
Qual è la complessità della suddetta scansione saltare su una chiave di ordinamento E 'lineari (O (n)) o qualche variante di ricerca binaria (O (log n))
Se? un tasto è ordinato -??? è saltare l'unica ottimizzazione disponibili
cosa sarebbe questo "salto" aspetto di ottimizzazione, come nel piano di spiegare
sia quello sopra spiegare il migliore possibile per questa query
Qual è il più veloce redshift risultato ci si può aspettare che fornisca dato questo scenario?
VanA ParAccel ha diversi comportamento in questo caso d'uso?

risposta

Problemi correlati