2013-10-17 4 views
5

findet Redshift effizient (d. H. Binäre Suche) einen Block einer Tabelle finden, die für eine Abfrage mit einer Bedingung A =? In einer Spalte A sortiert ist? Als Beispiel sei eine Tabelle T mit ~ 500 m Zeilen, ~ 50 Feldern, verteilt und sortiert nach Feld A, genannt. Feld A hat eine hohe Kardinalität - also gibt es ~ 4,5 m verschiedene A-Werte, mit genau dem gleichen Anzahl der Zeilen in T: ~ 100 Zeilen pro Wert.
Nehmen Sie einen Rotverschiebungscluster mit einem einzelnen XL-Knoten an.
Feld A ist nicht komprimiert. Alle anderen Felder haben eine Formkomprimierung, wie von ANALYZE COMPRESSION vorgeschlagen. Ein Verhältnis von 1:20 wurde im Vergleich zu einer unkomprimierten Tabelle angegeben.Amazon Redshift Equality-Filter Leistung und sortkeys

eine triviale Abfrage Gegeben:

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

Nach VACUUM und ANALYZE folgenden erklärt Plan gegeben:

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) 

Diese Abfrage dauert 39 Sekunden abgeschlossen. Die Hauptfrage lautet: Ist das das erwartete Verhalten der Rotverschiebung?

Gemäß der Dokumentation bei Choosing the best sortkey.
„Wenn Sie häufig Bereich Filterung oder Gleichheit zu tun Filterung auf einer Säule, die Spalte als Sortierschlüssel angeben Redshift kann für diese Spalte, weil es das Lesen ganze Datenblöcke überspringen verfolgt die minimalen und maximalen Spalte auf jedem Block gespeicherten Werte und Blöcke überspringen können, die mit dem Prädikat Bereich gelten nicht

In Choosing sort keys:
“. Eine weitere Optimierung, die auf sortierten Daten hängt die effiziente Handhabung ist von range-restricted Prädikaten. Amazon Redshift Speichert säulenförmige Daten in 1-MB-Festplattenblöcken. Die Min- und Max-Werte für jeden Block werden als Teil der Metadaten gespeichert. Wenn eine Spalte mit eingeschränktem Bereich ein Sortierschlüssel ist, kann der Abfrageprozessor die Min- und Max-Werte verwenden, um bei Tabellenscans schnell eine große Anzahl von Blöcken zu überspringen. Wenn beispielsweise in einer Tabelle fünf Jahre Daten nach Datum sortiert gespeichert sind und eine Abfrage einen Datumsbereich von einem Monat angibt, können bis zu 98% der Festplattenblöcke aus dem Scan entfernt werden. Wenn die Daten nicht sortiert sind, müssen mehr der Plattenblöcke (möglicherweise alle von ihnen) gescannt werden. Weitere Informationen zu diesen Optimierungen finden Sie unter Auswählen von Verteilungsschlüsseln. "

Secondary Fragen:
Was die Komplexität der oben genannten Überspringen Scan auf einem Sortierschlüssel Ist es linear (O (n)) oder eine Variante der binären Suche (O (log n))
If? ein Schlüssel sortiert -? ist die einzige verfügbare Optimierung Überspringen
Was im erklären Plan dieses „Überspringen“ Optimierung aussehen würde
ist die oben für diese Abfrage die beste möglich erklären
Was das schnellste Ergebnis Rotverschiebung kann erwartet werden, dieses Szenario zu liefern?
Hat Vanille ParAccel anders Verhalten in diesem Anwendungsfall?

Antwort