Holger Dietze hdietze42@web.de wrote:
Hallo,
andreas@a-kretschmer.de schrieb:
Zitat von Thomas Schmidt schmidt@netaction.de:
Zweites kostet es 25% CPU, wenn ich jede Sekunde das SELECT count(*) ausführe. Egal, ob sich an der Tabelle überhaupt etwas ändert. Diesen
Ich nix MySQL, aber unter PG würde dies auch dauern, da es einen Seq-Scan erfordert.
Eigentlich sollte es auch ein Full-Scan ueber einen Index tun, in dem nachweislich alle interessierenden Datensaetze enthalten sind (z.B. PK-Index). Ist natuerlich eine Frage der Spitzfindigkeit des Optimizers.
Dummerweise hat der Index aber keine Informationen darüber, welche Datensätze in welcher Transaction sichtbar sind ...
Normalerweise braucht man dies nicht, also die exakte Anzahl. Oft reicht eine grobe Schätzung der Gesamtanzahl, sie gilt ja streng genommen auch nur für die konkrete TX, in der Du das abfragst. Also, entweder guggst Du in den Statistiken nach einer Schätzung (in PG wäre dies pg_class.reltuples),
die Statistik halbwegs aktuell zu halten, kostet ein ANALYZE und damit fast einen Full Scan (je nach Genauigkeit).
ACK.
oder aber führst über einen TRIGGER einen exakten Counter.
TRIGGER: Bei sowas also Trigger auf INSERT und DELETE. Man muss sich dann dessen bewusst sein, dass man Redundanzen schafft, die einem in manchen Faellen wieder auf die Fuesse fallen.
Da geb ich Dir Recht.
Btw.: lange nix mehr von Dir gehört ...
Andreas