2016-07-19 1 views
1

Ich habe eine Abfrage wie:Redshift: Max Elemente innerhalb "IN-Klausel"?

SELECT count(id), pro.country_code 
FROM profiles AS pro 
WHERE id IN (SELECT profile_id FROM reports) 
GROUP BY pro.country_code; 

Meine Fragen:

Wie viele Elemente, die Sie in einer Rotverschiebung KLAUSEL verwenden kann? Speichern der tatsächlichen IDs anstelle der Sub-SQL-Anweisung muss schneller für die Durchführung dieser äußeren Abfrage jedes Mal sein, nicht wahr?

+0

Es gibt keine Beschränkung für die Anzahl der von der Unterauswahl zurückgegebenen Elemente. Zumindest nicht in Postgres und da Amazon eine Abzweigung ist (wenn auch von einer wirklich alten Version), sollte es auch keine Einschränkung geben. –

Antwort

2

Von dem, was ich weiß, gibt es keine Grenze, aber wenn Sie eine Menge Daten bringen, die Sie verwenden können existiert.

SELECT count(id), 
pro.country_code 
FROM profiles AS pro 
WHERE exists (SELECT profile_id FROM reports where pro.id=reports.profile_id) 
GROUP BY pro.country_code; 

Es sollte viel mehr schneller

Auch können Sie schneiden sich stattdessen von in

0

als „Benutzer“ bereits erwähnt, Ihre beste Leistung wird mit einer WHERE-Klausel und subquery VORHANDEN. Da Sie Leistung als eine wichtige Überlegung erwähnt haben, sollte ich auch darauf hinweisen, dass der wichtigere Leistungsfaktor Ihre Tischverteilung sein soll. Damit dies gut funktioniert, sollten Sie überprüfen, ob beide Tabellen die Spalte "profile_id" als Verteilungsschlüssel haben und dass beide Tabellen die Spalte mit demselben Datentyp deklariert haben.