![]() |
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Hallo,
ich wollte der Vollständigkeit halber doch noch mal meine Tesergebnisse zu count zusammenfassen. Ich wollte es einfach wissen. Es war etwas kompliziert, da der erste Aufruf immer am längsten dauert. Dann greift der DB Cache. Für eine zweiten Versuch müsste man den Rechner neu starten, da auch nach ShutDown und Neustart des Servers die Abfragen schneller gehn. Wahrscheinlich greift hier der System Cache vom OS. Die Ausführungsgeschwindigkeit für 1. select count(*) 2. select count(pk) 3. select count(pk) where pk > 0 ist in etwa gleich. Tabelle hatte ca. 750.000 Datensätze. Test 1 und 2 lag zwischen 500 un 540 ms. test 3 lag etwa bei 620 ms. Ich habe das ganze 30 mal durchgeführt. So, wie es aussieht, verlangsamt die zusätzliche Verwendung des Indexes (Test 3) den Prozess sogar noch. Frank |
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Zitat:
Würde einem DBMS-Optimierer jedenfalls zutrauaen, dass er selbst auf die geheimen Tabellen zugreifen würde, wenn da Zahlen geführt würden. Grüße // Martin |
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Hallo,
wie schon weiter oben gesagt wurde, läuft das Count(*) immer innerhalb einer Transaktion. Durch die MGA von Firebird gibt es keine "feste Recordzahl". Inwieweit man dem Nutzer sagen will 751.345, 751.346 ... Einträge sind drin, steht zur Frage. Heiko |
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Zitat:
Auf der oben verlinkten FB Page wurde da schon auf sehr verzweifelte Hacks zurückgegriffen, also wird FB hier wohl nix bieten. Die Frage ist halt, ob Trigger für jedes Delete und Insert auf Row-Ebene vertetbar wären. Dann könnte sich Alzaimar selbst eine Meta table führen, in der zu jeder Tabelle die Records in der aktuellen Transaktion stehen. Ob es dadurch zu mehr Deadlocks kommt bezweifle ich, schließlich schreibt man da ja nur, wenn man eh schon schreibt (insert/delete). Trotzdem ganz schön bitter, IMO... |
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Zitat:
SQL-Code:
Der Optimizer, der sich sonst einen Wolf optimiert (Hä? Wie? 'Der mit dem Wolf optimiert?' :gruebel: ), erspart sich das, vermutlich aus den von mir genannten Gründen.
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2
Ich verstehe die Argumentation mit MGA nicht. Genauso, wie MGA mir eine (meine) Sicht auf alle Daten liefert, könnte das doch genauso mit der Zeilenanzahl funktionieren. Schließlich gibt es Tabellen für Tabellen, Felder, Views usw. Wieso steht in der Tabellentabelle nicht auch die Tabellengröße drin? Ich kapiere es nicht. |
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Wegen der Versionierung wären dann auch mehrere Metadatenversionen von Nöten
|
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Zitat:
Es kommt zwar nicht zu einem Deadlock, aber sobald zwei Insert-Trigger gleichzeitig die alte Satzzahl lesen, und der erste Trigger diese Zahl (erhöht ums eins) erfolgreich zurückschreibt und committed, kann der zweite Insert Trigger den ursprünglichen Satz nicht mehr updaten (da er sich dadurch verändert hat), und muss aufgeben... |
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Da die Trigger in Transkationen laufen, sehe ich das Problem nicht. Allerdings wäre diese tabelle dann auch "versioniert" (mehrere konkurrierende Zugriffe -> mehrere Datensätze/Werte)
|
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Ich hatte aber Deadlocks, und zwar immer beim Programmstart. Heute war ich out of office, aber morgen gehts der Deadlocke an den Sack. Meine Lösung besteht aus einer Tabelle mit einer Zeile und einem Feld ('RowSize') sowie zwei Triggern (BeforeInsert, BeforeDelete). Am Anfang der SW kommt manchmal genau 1x ein Deadlock. Danach nicht nochmal.
|
Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
Hallo,
was passiert, wenn nach dem Insert ein Rollback gemacht wird ? ? Dann wird natürlich kein OnDelete-Trigger aufgerufen. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 Uhr. |
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