Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [FB 2.1] Schnelle Alternative zu Count(*) ? (https://www.delphipraxis.net/133871-%5Bfb-2-1%5D-schnelle-alternative-zu-count-%2A.html)

brechi 13. Mai 2009 12:05

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Aber die Update operation für die Spalte mit der Anzahl sollte ebenfalls rückgägnig gemacht werden (da Transaktion). d.h. bei Insert (datensatz) -> Trigger -> Update (inc) wird das inkerementeiren ebenfalls rückgängig gemacht. Jedenfalls die Theorie.

exilant 13. Mai 2009 12:43

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Nach nunmehr 40 Einträgen zu diesem Thread möchte ich mit Verlaub mal die
Frage stellen: Kann es sein, das hier ein Problem mit dem Datenbank/Anwendungsdesign vorliegt?
Ich habe in meiner nun auch schon recht langen Praxis noch nie eine absolute Datensatzanzahl (was immer das ist)
einer Tabelle (und schon garnicht von einer derart großen) benötigt. Und wenn die Anzahl ja doch benötigt wird: Wieso wird dieses count() Ergebnis so häufig benötigt dass es ein Performanceproblem gibt?
Ich bin einfach nur neugierig.

sirius 13. Mai 2009 12:53

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Kann dieses FB keine Stored Procedures. Da kann man doch mitzählen.

mkinzler 13. Mai 2009 13:05

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Zitat:

Kann dieses FB keine Stored Procedures. Da kann man doch mitzählen.
Doch, wird aber auch nicht (viel) schneller sein

alzaimar 13. Mai 2009 17:21

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Zitat:

Zitat von exilant
Kann es sein, das hier ein Problem mit dem Datenbank/Anwendungsdesign vorliegt?...Wieso wird dieses count() Ergebnis so häufig benötigt dass es ein Performanceproblem gibt? Ich bin einfach nur neugierig.

Einfacher DB-Puffer. Anzahl der gepufferten Datensätze soll laufend angezeigt werden. Wenn die Anwendung läuft, zähle ich intern mit (Singleuser-DB), also kein Performanceproblem. Wäre ja auch bescheuert, 1x pro Sekunde alle Datensätze zu zählen. Beim Programmstart muss ich aber wissen, wie viele Datensätze jetzt gerade in der DB rumliegen. Bei 1Mio gepufferten Daten dauert mir dieses eine "COUNT(*)" zu lang. Die Anwendung darf nunmal nicht 30-40 Sekunden warten, bis sie gestartet ist. Oder?
[quote]Ich habe in meiner nun auch schon recht langen Praxis noch nie eine absolute Datensatzanzahl (was immer das ist){/quote] Nun ja, bei Statistiken ist das schon interessant... Die 'absolute Datensatzanzahl' ist übrigens die absolute Anzahl der Datensätze. Was sonst. :stupid: Also ein 'COUNT(*) FROM TABELLE'. So schwer ist das doch nicht. :mrgreen:

omata 13. Mai 2009 18:39

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Zitat:

Zitat von alzaimar
Die Anwendung darf nunmal nicht 30-40 Sekunden warten, bis sie gestartet ist. Oder?

Nur mal so eine Idee...

Vielleicht die Ermittlung in einen Thread auslagern, dann kann die Anwendung starten, man kann arbeiten und wenn die Zahl ermittelt wurde, werden die gewünschten Statistiken angezeigt.

TBx 13. Mai 2009 19:28

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Was hast Du da für ne Tabellenstruktur? Und was für ein Rechner wird genutzt?
Ich habe hier mal eine Tabelle mit 1,1 Mio Datensätzen mit Zufallswerten angelegt. Da krieg ich ein count unter 3 Sekunden hin.

alzaimar 13. Mai 2009 20:33

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Hi Tbx.
Eine Tabelle: ID (Int), Data (BLOB, Text), inDate (TimeStamp), Source (Varchar(80))

Rechner ist ein IBM Schlapptop R61 oder irgend so eine Gurke (Firmenlaptop).

TBx 13. Mai 2009 20:36

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Ist das PK-Feld das erste in der Tabellendefinition? Zeig ggf. mal einen DDL-Extract der Tabelle.

Gruß
Thomas

hoika 14. Mai 2009 10:17

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Hallo,

Zitat:

Die Anwendung darf nunmal nicht 30-40 Sekunden warten, bis sie gestartet ist. Oder?
Spash-Screen.
Haben Sie bitte einen Moment Geduld. tüt tüt ...;)


Ne, im Ernst.
30-40 Sekunden dauert das count(*) ???
Hast du das mal standalone getestet (ibexpert)


Noch zur Berechtigung des count(*).
Wie bekommt man z.B. sonst raus, ob eine Tabelle Daten enthält ?
(OK, bei FB gibt es exists)


Heiko

DeddyH 14. Mai 2009 11:05

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Könnte man doch auch mit
SQL-Code:
SELECT FIRST 1 PK FROM Tabelle
und anschließender Prüfung auf EOF machen, oder täusche ich mich?

automatix 14. Mai 2009 11:50

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Hallo!

Zitat:

Einfacher DB-Puffer. Anzahl der gepufferten Datensätze soll laufend angezeigt werden. Wenn die Anwendung läuft, zähle ich intern mit (Singleuser-DB), also kein Performanceproblem. Wäre ja auch bescheuert, 1x pro Sekunde alle Datensätze zu zählen. Beim Programmstart muss ich aber wissen, wie viele Datensätze jetzt gerade in der DB rumliegen.
Wenn deine Anwendung die Einzige ist die auf die Daten zugreift, dann mach doch den select count(*) nur beim ersten Programmstart, dann zählst Du intern mit und beim beenden deiner Anwendung schreibst Du den letzten Stand in eine Tabelle und beim nächsten Programm liest Du die Anzahl aus dieser Tabelle.

Grüße

hoika 14. Mai 2009 13:20

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Hallo,

DeddyH, du täuscht dich ;)
Was soll denn den Statement erreichen ?

Es könnten ja zwischendurch Datensätze gelöscht worden sein.
Der PK nützt da nichts.


Heiko

DeddyH 14. Mai 2009 14:40

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Um ohne COUNT() zu ermitteln, ob überhaupt Datensätze vorhanden sind, das war doch Deine Frage.

neo4a 14. Mai 2009 16:17

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Als Merkwert kann man sehr schön einen Generator benutzen. Die eigentliche Berechnung darf dann gern in einem Thread erfolgen wie Omata schon bemerkt hat), der den Generator aktualisiert. Dieser dient zur Startzeit als Initialwert und wird im weiteren Verlauf neu berechnet.

--
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.
Seite 2 von 2     12   

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