Delphi-PRAXiS
Seite 1 von 6  1 23     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)

alzaimar 11. Mai 2009 09:40

Datenbank: Firebird • Version: 2.1 • Zugriff über: Egal

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

Ich habe eine Tabelle mit 1 Mio Einträgen. In einer App soll ständig die Anzahl der Zeilen dieser Tabelle angezeigt werden. Ein 'SELECT COUNT(*) FROM TABELLE' dauert ewig.

Frage: Gibt es eine schneller Alternative, um die Zeilenanzahl einer Tabelle zu ermitteln? Ich vermute, es geht irgendwie über die $RDB-Tabellen.

Hat jemand einen Hint?

mkinzler 11. Mai 2009 09:46

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
SQL-Code:
Select count(<pk>)
statt
SQL-Code:
select Count(*)

Elvis 11. Mai 2009 09:49

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

Zitat von mkinzler
SQL-Code:
Select count(<pk>)
statt
SQL-Code:
select Count(*)

Das ist bei fast allen DBMS schneller, die leider nciht schlau genug sind um zu erkennen, dass hier einfach die Metadaten des PK-Indizes hergenommen werden können.
Tut aber auch nicht weh wenn man die SQLs mit MSSQL, Sybase oder Ora teilen will...

alzaimar 11. Mai 2009 12:53

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

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

hazard999 11. Mai 2009 13:05

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Vielleicht reicht das ja:

http://www.firebirdfaq.org/faq5/

R2009 11. Mai 2009 13:43

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

die Anzahl der Datensätze steht doch in deiner Datenbankkomponente (ADOquery.... zumindest bei denen die ich bisher verwendet habe).
Vielleicht lieg jetzt auch falsch, aber 3 Zeilen ist es Wert.

Viele Grüsse!

alzaimar 11. Mai 2009 13:44

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

nein, das ist nicht genau. Ich habe mir nun so beholfen, das ich die Anzahl in einer separaten Tabelle (1 Zeile, 1 Feld 'RowCount') per Trigger auf dem Laufenden halte.

@R2009: Du meinst die 'Recordcount'-Eigenschaft.
Rate mal, was die macht :zwinker:

[ ] Sie weiss einfach, wie viele Zeilen in der Tabelle stehen
[ ] Sie liest alle Zeilen ein (per SELECT * FROM) und zählt sie dann.

(Tipp: Nur eine Antwort ist richtig)

Bonusfrage: Geht das schneller? :mrgreen:

Elvis 11. Mai 2009 14:13

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 ist bitter.
Ernsthaft, manche fehlende Features sind böse genug, dass man sie als Bug ansehen muss.

Habe glücklicherweise noch nie ein uneingeschränktes Count(...) in FB gebraucht... :angle2:

mkinzler 11. Mai 2009 15:12

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Notfalls basteslt du dir halt eine eigene Systemtabelle, in welche du die Anzahl per Trigger updatest
( auch wenns der Normalisierung widerspricht)

Satty67 11. Mai 2009 16:05

Re: [FB 2.1] Schnelle Alternative zu Count(*) ?
 
Meine, das Firebird den Index ohne WHERE gar nicht verwendet.
SQL-Code:
Select COUNT(<pk>) FROM <table> WHERE 1=1
Habe aber keine so große Testtabelle, um den Unterschied zu testen.

€: Scheint langsamer... Where kostet wohl mehr als es bringt (falls das mit dem Index s.o. stimmt)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.
Seite 1 von 6  1 23     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