AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [FB 2.1] Schnelle Alternative zu Count(*) ?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von alzaimar · begonnen am 11. Mai 2009 · letzter Beitrag vom 14. Mai 2009
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

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

  Alt 11. Mai 2009, 09:40
Datenbank: Firebird • Version: 2.1 • Zugriff über: Egal
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?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 11. Mai 2009, 09:46
Select count(<pk>) statt select Count(*)
Markus Kinzler
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#3

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

  Alt 11. Mai 2009, 09:49
Zitat von mkinzler:
Select count(<pk>) statt 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...
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

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

  Alt 11. Mai 2009, 12:53
Hi Markus und Elvis,

Danke für den Tipp. Klappt nur leider nicht, d.h. es ist immer noch genauso lahm.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von hazard999
hazard999

Registriert seit: 2. Okt 2008
38 Beiträge
 
#5

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

  Alt 11. Mai 2009, 13:05
Vielleicht reicht das ja:

http://www.firebirdfaq.org/faq5/
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#6

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

  Alt 11. Mai 2009, 13:43
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!
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

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

  Alt 11. Mai 2009, 13:44
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

[ ] 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?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

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

  Alt 11. Mai 2009, 14:13
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...
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 11. Mai 2009, 15:12
Notfalls basteslt du dir halt eine eigene Systemtabelle, in welche du die Anzahl per Trigger updatest
( auch wenns der Normalisierung widerspricht)
Markus Kinzler
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

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

  Alt 11. Mai 2009, 16:05
Meine, das Firebird den Index ohne WHERE gar nicht verwendet.
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)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr.
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