Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

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)

dataspider 11. Mai 2009 16:30

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

ob man die Verwendung eines Index erzwingt oder nicht, macht IMHO keinen Unterschied.
Ein Count von 1.000.000 Datensätzen erzeugt mit und ohne Index 1.000.000 Reads.

Ich denke, die Variante mit den Triggern ist die wohl einzig machbare.

Cu, Frank

alzaimar 11. Mai 2009 16:58

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

ich hab das jetzt mit den Triggern so umgesetzt. Mich wundert es nur ein wenig, denn Firebird selbst sollte doch wissen, wie viele Zeilen denn nun in der Tabelle sind bzw. Blätter im B-Baum des PK.

Die Trigger-Lösung ist leider nicht ganz so hübsch, weil ich mir dadurch eigentlich überflüssige Deadlock-Kandidaten einhandle bzw. unnötige Locks.

mjustin 11. Mai 2009 16:59

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

Zitat von dataspider
Ich denke, die Variante mit den Triggern ist die wohl einzig machbare.

Könnte es bei vielen gleichzeitigen Inserts dabei nicht Probleme geben, auch wenn die Anwendungen mit Transaktionen arbeiten?

mkinzler 11. Mai 2009 17:27

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Dann müssen es aber verdammt viele sein.

mjustin 11. Mai 2009 17:42

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

Zitat von alzaimar
Hi Leute,

ich hab das jetzt mit den Triggern so umgesetzt. Mich wundert es nur ein wenig, denn Firebird selbst sollte doch wissen, wie viele Zeilen denn nun in der Tabelle sind bzw. Blätter im B-Baum des PK.

Dann müsste FB das aber für jede Transaktion getrennt wissen - eine Repeatable Read Transaktion, die drei Tage läuft, müsste am Ende noch immer die ursprüngliche Anzahl vom Transaktionsstart sehen.

Zitat:

Zitat von alzaimar
Die Trigger-Lösung ist leider nicht ganz so hübsch, weil ich mir dadurch eigentlich überflüssige Deadlock-Kandidaten einhandle bzw. unnötige Locks.

Zielkonflikt: entweder eine genaue Anzahl, oder eine skalierbare / deadlockfreie Lösung :)

mjustin 11. Mai 2009 17:44

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

Zitat von mkinzler
Dann müssen es aber verdammt viele sein.

Zwei Clients sind manchmal schon einer zuviel :)

khh 11. Mai 2009 18:19

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

Zitat von alzaimar
Hi Markus und Elvis,

Danke für den Tipp. Klappt nur leider nicht, d.h. es ist immer noch genauso lahm.

das entscheidende ist doch, dass ein index auf dem feld liegt


Gruss Kh

mkinzler 11. Mai 2009 18:25

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

Zwei Clients sind manchmal schon einer zuviel Smile
das sollte nicht das Problem sein sondern eher, wenn sehr vile Insert/Deletes innerhalb kurzer Zeit passieren

dataspider 11. Mai 2009 18:32

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

Zitat von khh
das entscheidende ist doch, dass ein index auf dem feld liegt

Überleg doch mal...
Wie soll ein Index beim Zählen aller Datensätze behilflich sein?

Erst bei einer Einschränkung der Ergebnismenge mit Where oder beim Sort wird ein Index benötigt.

Frank

mkinzler 11. Mai 2009 18:35

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

Wie soll ein Index beim Zählen aller Datensätze behilflich sein?
Es müssen nur die Einträge im Index gezählt werden, was etwas schneller sein sollte


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.
Seite 2 von 6     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz