Wir haben eine Tabelle in einer Postgres DB, die unter anderem zwei Ganzzahlen auflistet, sagen i1, i2 und ein Doppel, sagen d.Alle Zeilen aus einer Postgres-Tabelle erhalten
Aus irgendeinem Grund benötigen wir alle Werte dieser Felder in allen Zeilen in dieser Tabelle. Außerdem müssen wir dies mit Java tun, frag mich nicht warum.
Ich versuche, den effizientesten Weg zu sehen, dies zu tun. Natürlich kann ich eine Java-Anweisung mit einer Abfrage
SELECT i1, i2, d FROM mytable;
ausführen und dann über ResultSet iterieren. Ich bin besorgt, dass dies die DB belasten könnte.
Die Tabelle enthält wahrscheinlich mehrere Millionen Zeilen (definitiv weniger als 10m) und wir sind nur an diesen drei Feldern interessiert.
Wenn es ein einzelner Spalte Primärschlüssel ist, kann ich leicht einen Cursor Aufruf schreiben, wie so
SELECT i1, i2, d FROM mytable where primarykey > ?;
Aber die Tabelle nicht einen einzigen Spalte Primärschlüssel.
Während i1 und i2 eindeutig sind, hat die Tabelle keinen Index, und da es sich nur um eine einmalige Aktivität handelt, ist es unwahrscheinlich, dass jemand im Team daran interessiert wäre, einen zu erstellen.
Ohne Index, ich vermute, die Auswahl aller Zeilen wird tatsächlich billiger als die Bestellung von i1 und i2 und dann Schreiben eines Cursors Anruf mit diesen.
Was ist die effizienteste und am wenigsten problematische Art, dies zu tun?
Die select-Anweisung Sie zeigen haben die einzige Möglichkeit, das zu tun. Wahrscheinlich möchten Sie jedoch den Treiber so konfigurieren, dass die Ergebnisse mit einem Cursor abgerufen werden: https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor –
Sie können Daten durch Erstellen eines Indexes "vorbereiten" auf diese 3 Felder - auf diese Weise wird nur Index scannen, aber es macht nur Sinn, wenn Sie oft nur diese 3 Spalten scannen und zusätzliche Index ist erschwinglich –
Hallo, es gibt keine einzelne Spalte Primärschlüssel und während i1 und i2 sind garantiert einzigartig, es gibt keinen Index. Der Beitrag wurde mit dieser Beschreibung aktualisiert. Tut mir leid, dass ich das vergessen habe, als ich die ursprüngliche Beschreibung geschrieben habe. – D159