Heim >Datenbank >MySQL-Tutorial >Wie wählt man effizient zufällige Zeilen aus großen PostgreSQL-Tabellen aus?
PostgreSQL-Methode zur zufälligen Zeilenauswahl
Herkömmliche Methoden zur zufälligen Zeilenauswahl sind ineffizient und langsam, wenn es um große Tabellen mit Millionen oder sogar Milliarden von Datensätzen geht. Zwei gängige Methoden sind:
Verwenden Sie random()
, um zu filtern:
<code class="language-sql"> select * from table where random() < 0.001;</code>
Verwenden Sie order by random()
und limit
:
<code class="language-sql"> select * from table order by random() limit 1000;</code>
Da jedoch ein vollständiger Tabellenscan oder eine vollständige Tabellensortierung erforderlich ist, sind diese Methoden nicht die beste Wahl für Tabellen mit einer großen Anzahl von Zeilen und führen zu Leistungsengpässen.
Optimierungsmethoden für große Tabellen
Für die folgenden Tabellentypen sollten Sie die folgende Optimierungsmethode in Betracht ziehen, die deutlich schneller ist:
Abfrage:
<code class="language-sql">WITH params AS ( SELECT 1 AS min_id, -- 可选:自定义最小ID起始值 5100000 AS id_span -- 近似ID范围(最大ID - 最小ID + 缓冲) ) SELECT * FROM ( SELECT DISTINCT 1 + trunc(random() * p.id_span)::integer AS id FROM params p, generate_series(1, 1100) g GROUP BY 1 ) r INNER JOIN big ON r.id = big.id LIMIT 1000;</code>
So funktioniert es:
ID-Bereichsschätzung:
Zufällige ID-Generierung:
Redundanz und Duplikatbeseitigung:
Tabellenverknüpfungen und Einschränkungen:
Warum es schnell ist:
Minimale Indexnutzung:
Optimierte Zufallszahlengenerierung:
Redundanz und Duplikatbeseitigung:
Weitere Optionen:
Rekursiver CTE zur Behandlung von Lücken:
Funktions-Wrapper zur Wiederverwendung:
Universelle Funktionen für jeden Tisch:
Ansichten materialisieren, um die Geschwindigkeit zu erhöhen:
TABLE SAMPLE
in PostgreSQL 9.5:
TABLE SAMPLE SYSTEM
“-Funktion von PostgreSQL, um eine schnellere, aber weniger zufällige Zeilenstichprobenmethode zu implementieren und sicherzustellen, dass eine genaue Anzahl von Zeilen zurückgegeben wird. Beachten Sie jedoch, dass die Stichprobe aufgrund von Clustereffekten möglicherweise nicht völlig zufällig ist. Das obige ist der detaillierte Inhalt vonWie wählt man effizient zufällige Zeilen aus großen PostgreSQL-Tabellen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!