Postgresql Abfrage anzahl Datensätze

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Postgresql Abfrage anzahl Datensätze

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh »

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: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von Martin Altmann »

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von Tom »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von Martin Altmann »

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von AUGE_OHR »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von AUGE_OHR »

ramses hat geschrieben: Mi, 28. Feb 2018 22:34Dieser 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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von AUGE_OHR »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von brandelh »

Na wenn die Anzahl gelöschter Datensätze hoch ist, ist auch die Abweichung groß ...
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Postgresql Abfrage anzahl Datensätze

Beitrag von ramses »

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
Valar Morghulis

Gruss Carlo
Antworten