Das nächste Entwicklertreffen findet Anfang Mai in Münster statt - weitere Infos bzw. zur Anmeldung!

Postgresql Abfrage anzahl Datensätze

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1117
Registriert: Mi, 28. Jul 2010 17:16

Postgresql Abfrage anzahl Datensätze

Beitrag von ramses » Mi, 28. Feb 2018 13:33

Hallo

ich möchte die Anzahl Datensätze die sich in einer Tabelle befinden abfragen.

Der Befehl:

Code: Alles auswählen

select count(*) from tabellen_name; 
liefert die die korrekte Anzahl Datensätze, benötigt dazu jedoch 8-10 MInuten.

Kennt jemand eine schnellere Lösung / Befehl?

Gruss Carlo

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14632
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh » Mi, 28. Feb 2018 13:51

Die Anzahl ohne Suchbegriff sollte doch sehr schnell verfügbar sein, greifst du über Alaska DBE zu oder über SQLexpress ?

Wie schnell ist es über das Systemtool der Datenbank ?
Gruß
Hubert

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1117
Registriert: Mi, 28. Jul 2010 17:16

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses » Mi, 28. Feb 2018 14:06

Hallo Hubert

ich verwende Natives-Sql also über Aufrufe der libpq.dll.
Die Alaska-DBE funktioniert nicht korrekt und SQLexpress habe ich nicht.
Postgresql Server ist Version 10.1_1

Das Systemtool der Datenbank pgAdmin4 v.2.1 benötigt auch die selbe Zeit 8-10 Minuten.

Gruss Carlo

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14632
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh » Mi, 28. Feb 2018 14:13

Sind die Daten komplex verknüpft oder sind es nur so viele ... aber wenn das Systemtool die gleiche Zeit braucht, liegt es nicht an Xbase++
Gruß
Hubert

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 14597
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von Martin Altmann » Mi, 28. Feb 2018 14:14

Carlo,
gibt es eine "Spalte" mit einem Primärschlüssel? Die also für jeden Satz einen Eintrag enthält?
Wie lange dauert es, wenn du den Namen dieser "Spalte" statt des * verwendest?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von Tom » Mi, 28. Feb 2018 14:16

Mmh. 170.000 Datensätze, eine mit dem Upsize-Tool erzeugte Tabelle. In PgAdmin 3 Sekunden, im Code fast genau der gleiche Wert. Übrigens bei USE <table>, DbGoBottom() und ? RecNo() nur eine Sekunde.
Herzlich,
Tom

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1117
Registriert: Mi, 28. Jul 2010 17:16

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses » Mi, 28. Feb 2018 14:23

Hallo Hubert

es ist eine einfache Tabelle mit einigen Feldern und 2 Indexdateien ohne jede Verknüpfung.

An xbase++ liegt es sicher nicht, ich verwende die DBE ja nicht.

Ich suche eine schnellere Variante der Abfrage "Anzahl Datensätze resp. Count(*) ".

Gruss Carlo

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 14597
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von Martin Altmann » Mi, 28. Feb 2018 14:29

Carlo,
wenn Du eine schnellere Variante suchst, findest Du ein wenig mittels Google:
https://stackoverflow.com/questions/794 ... postgresql
Die Antworten sind recht interessant!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1117
Registriert: Mi, 28. Jul 2010 17:16

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses » Mi, 28. Feb 2018 14:58

Danke für eure Antworten.

@Martin, ja die gibt es es dauert dann etwa 4-6 MInuten, die Antworten aus Google die du ansprichst habe ich schon versucht, deren Ergebnisse sind schnell unter 1/100 Sek. liegen aber jeweils um mehrere Mio. Datensätze daneben.

@Tom das USE über die Postgres-DBE auf eine viel kleinere als die aktuelle Tabelle dauerte schon ca. 30 Sekunden. Dann war auch das Upsize Tool nicht kompatibel zur damaligen aktuellen Postgres-Version und die Doku für die Alaska Postgres-Funktionen fehlte oder war unvollständig. Deshalb verwende ich jetzt natives Postgres. Schade eigentlich.

Gruss Carlo

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11551
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von AUGE_OHR » Mi, 28. Feb 2018 21:33

ramses hat geschrieben:
Mi, 28. Feb 2018 13:33
ich möchte die Anzahl Datensätze die sich in einer Tabelle befinden abfragen.
Kennt jemand eine schnellere Lösung / Befehl?
hast du ein Field __RECORD in deiner Table ?

Code: Alles auswählen

Query : SELECT * FROM fsicher___record_seq
Table have 10 Property 0.06 Sec.

sequence_name : fsicher___record_seq
last_value : 548329
start_value : 1
increment_by : 1
max_value : 9223372036854775807
min_value : 1
cache_value : 1
log_cnt : 0
is_cycled : f
is_called : t

Table have 548329 entry
gruss by OHR
Jimmy

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1117
Registriert: Mi, 28. Jul 2010 17:16

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses » Mi, 28. Feb 2018 22:34

Hallo Jimmy

nein ein Feld __record habe ich nicht. Die Tabellen wurden alle OHNE das upsize Tool auf "normale" Art erstellt. Ich habe in allen Tabellen ein Feld "id" des Typs "serial"
Die zuletzt verwendete Nummer lässt sich dann auch abfragen.

Code: Alles auswählen

Query: select * from tabellenname_id_seq;
Ergebnis nach 41ms  
last_value  xxxxxxxxxxx
Der Wert last_value zeigt dann einfach die letzte verwendet Nummer des Datensatzzählers der Tabelle. Dieser liegt auch um Mio. daneben da es nur ein fortlaufender Zähler ist der bei jedem "insert" einfach erhöht wird ..... und keinen Bezug zu den aktuell noch vorhandenen Datensätze hat ...

Ich habe nun noch alle Ports geupdatet und nun die Postgesql Version 10.2 im Einsatz, auch mit der ist es aber nicht besser.

Gruss Carlo

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11551
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von AUGE_OHR » Mi, 28. Feb 2018 23:43

ramses hat geschrieben:
Mi, 28. Feb 2018 22:34
Dieser liegt auch um Mio. daneben da es nur ein fortlaufender Zähler ist der bei jedem "insert" einfach erhöht wird
JA ... aber im welchen Verhältnis liegt der Wert und wofür willst du die "genaue" Anzahl :?:
ich verwenden die Anzahl z.b. für einen Progressbar und der kann nur +- 1% anzeigen

"Lücken" beim hoch zählen von SERIAL kommen doch nur durch "löschen" ... das mag ich schon bei DBF nicht [-X
neben __RECORD habe ich auch das Field __DELETED was mir reicht um einen gelöschten Satz zu erkennen.
damit gibt es bei mir keine "Lücken" und die Abfrage auf ein SERIAL Field ist dann "genau"
gruss by OHR
Jimmy

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14632
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh » Do, 01. Mär 2018 7:16

Wir sollten mal klären, wie groß die Datenbank tatsächlich ist, wenn das Ergebnis um Millionen Datensätze daneben liegt ;-)

Bei MySQL gibt es Metadaten in extra Tabellen, ob diese Info dort stünde weiß ich auch nicht, aber wenn wäre das der richtige Weg.
Gruß
Hubert

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1117
Registriert: Mi, 28. Jul 2010 17:16

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses » Do, 01. Mär 2018 8:11

Guten Morgen zusammen
wofür willst du die "genaue" Anzahl
Als "Inventarwert" wieviele Datensaätze sind vorhanden.
Field __DELETED was mir reicht um einen gelöschten Satz zu erkennen
Damit markierts du einen Satz als gelöscht ohne den Satz wirklich aus der Datenbank zu entfernen. Die Serial zeigt dann auch nicht den "Bestand der gültigen" Datensätze sondern wie bei mir den Wert "Angelegte Sätze seit Beginn" den niemand wirklich interessiert.
Wir sollten mal klären, wie groß die Datenbank tatsächlich ist, wenn das Ergebnis um Millionen Datensätze daneben liegt
Diese Tabelle belegt ca. 350 GB mit ca. 500 Mio Datensätzen.

Gruss Carlo

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14632
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh » Do, 01. Mär 2018 9:15

Ja das sind Datenmengen ... wenn es um die Statistik geht, würde ich da morgens früh eine Abfrage starten und den Tag mit dem richtigen Wert beginnen ...
ansonsten diesen zurückliefern, bei normaler Eingabe sind die paar hundert dann sicher nicht von Belang, beim Import größerer Datenmengen müsste der Wert neu berechnet werden.
Gruß
Hubert

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11551
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von AUGE_OHR » Do, 01. Mär 2018 9:28

ich verstehe nicht wie "last_value" bei dir "so" daneben liegen soll ... :shock:

was COUNT(*) angeht :
PDF v9.1 Seite 300

Note: Users accustomed to working with other SQL database management systems might be
disappointed by the performance of the count aggregate when it is applied to the entire table. A
query like:

Code: Alles auswählen

SELECT count(*) FROM sometable;
will be executed by PostgreSQL using a sequential scan of the entire table.
unabhängig von den 10min ist das COUNT(*) ja wohl nicht alles was du machst.
wie lange dauert denn die ganze Arbeit wenn du dich durch 500 Mio Datensätzen durch arbeitest :?:
gruss by OHR
Jimmy

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14632
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh » Do, 01. Mär 2018 9:45

Na wenn die Anzahl gelöschter Datensätze hoch ist, ist auch die Abweichung groß ...
Gruß
Hubert

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1117
Registriert: Mi, 28. Jul 2010 17:16

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses » Do, 01. Mär 2018 10:32

Hi
wie lange dauert denn die ganze Arbeit wenn du dich durch 500 Mio Datensätzen durch arbeitest
ein

Code: Alles auswählen

select * from tebellenname where mw1 >= 20000 and mw1 <= 30000;
(entspricht einem "set filter to mw1 >= 20000 .and. mw1 <= 30000" auf eine DBF in xbase)
dauert 97ms und liefert 2034 Datensätze (zu einer Zeit in der die Datenbank eine Belastung von 10'000-15'000 BlockI/O Sek. bewältigt)

Nachtrag: "Durcharbeiten" -> Eine Auswertung durch alle Sätze dauert auf einem Rechner einige Tage oder als Teilaufgaben auf mehrere Rechner aufgeteilt etwas kürzer.

Ja die Anzahl gelöschter Sätze wird täglich grösser und Postgres bereinigt den Platz zum Glück ohne weiteres zutun wie Pack usw.

Gruss Carlo

Antworten