![]() |
AW: Schneller Algorithmus für eine Zahl in mehren Bereichen?
Zitat:
|
AW: Schneller Algorithmus für eine Zahl in mehren Bereichen?
Zitat:
|
AW: Schneller Algorithmus für eine Zahl in mehren Bereichen?
Das erzeugt 10000 Datensätze (Bereiche) in Postgres und findet eine zufällige Zahl darin. Es dauert ca 50 ms.
Code:
Nimmt man das Select ohne Where Clause und füllt die Daten in eine Tabelle, ist die Abfrage auf eine Zahl mindestens doppelt so schnell. Man kann das Statement unter
select r_search, int4range(r_low,r_high ) as r_range, upper(substr(md5(random()::text), 0, 6))as r_name from (
select r_search, r_low, (r_low+random()*r_dist_max)::int4 as r_high from ( select r_search, p.r_min, (p.r_min+random()*r_max)::int4 as r_low, r_dist_max from pg_catalog.generate_series(1, 10000, 1), -- Anzahl generierter Datensätze (select (random()*10000+9999)::int4 as r_min, 1000000 as r_max, 1000 as r_dist_max, (random()*1000000)::int as r_search )p -- Parameter ) x -- aufbereitete Zufallswerte ) r -- weiter aufbereitete Zufallswerte where r_search <@ int4range(r_low,r_high ) ![]()
Code:
create table rangetest (r_range int4range , r_name varchar(5));
Die reine Abfrage bei vorhandener Tabelle <rangetest> lautet dann:
Code:
Hier sind noch keine Indizierungen im Spiel, nur der spezielle Range Datentyp von Postgres. Ohne den, also mit einer beliebigen DB und 2 Spalten für den Range, wäre die Geschwindigkeit vermutlich ähnlich.
select * from rangetest
where (random()*1000000)::int <@ r_range Mit geänderten Parametern kann man den Test variieren. Momentan sind sie grob zurecht geschoben, um sichtbare Ergebnisse zu erhalten. Die Frage ist, unter welchen Bedingungen sich ein aufwändiger Algorithmus lohnt. |
AW: Schneller Algorithmus für eine Zahl in mehren Bereichen?
Ich werfe da mal den folgenden Beitrag in die Runde:
![]() Bitte auch den beiden Links folgen, auf die im Text verwiesen wird. Grüße Mikhal |
AW: Schneller Algorithmus für eine Zahl in mehren Bereichen?
Vielen Dank an alle, die sich diesem Thema angenommen haben.
Ich habe mir die Daten noch einmal genauer angesehen und habe den Weg mit einer Vorindexierung der Daten gewählt und in denen suche ich mit diesem "halben Tabellen Algo". Das geht wirklich flott und kein Vergleich zu früher, wo immer die ganze Datei durchgelaufen wurde. Danke nochmal, das hat mir alles sehr geholfen! Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz