![]() |
Datenbank: FB • Version: 2.5 • Zugriff über: egal
Select Count(*) vs. Select First 1
Hallo,
bei einer üblichen Performance-Analyse sehe ich mal wieder alten Code mit dem üblichen Select Count(*) . Um festzustellen, ob es einen Datensatz bereits gibt, kann ich ja Select Count(*) oder Select First 1 nehmen. Nehmen wir mal, an das Ergebnis das Count(*) wären 20 Einträge. Ist das Select First 1 nicht perse schneller, weil beim Finden des ersten Datensatzes sofort abgebrochen wird? Ich benutze ein normales Where, kein Like, der Index wird also direkt benutzt. Das Suchfeld ist natürlich indiziert und nicht der Primary Key. Was meint ihr? |
AW: Select Count(*) vs. Select First 1
Klar, das count(*) muss einen kompletten Fullscan machen (wenn nicht Indizes benutzt werden können)
Das First start sicher anlaog mit einem Fullscann, kann aber abbrechen. Wenn es auch so implementiert ist, dass es das tut, ist es schneller. |
AW: Select Count(*) vs. Select First 1
Es gibt Dialekte bzw Komponenten, die kein RecordCount zulassen. In diesen Fällen ist es sicherer so:
Delphi-Quellcode:
select
count(1) RecCount from t_tabelle ; |
AW: Select Count(*) vs. Select First 1
Zitat:
|
AW: Select Count(*) vs. Select First 1
Zitat:
Delphi-Quellcode:
natürlich...
while not eof do next
|
AW: Select Count(*) vs. Select First 1
Nur wenn das "select count(1) RecCount" auf Grund der angegebenen Bedingung genau einen Datensatz ermittelt, ist es gleich schnell.
|
AW: Select Count(*) vs. Select First 1
Zitat:
|
AW: Select Count(*) vs. Select First 1
Hallo,
ich arbeite nur mit Firebird, also gibt es das First auf jeden Fall. Zitat:
Also sollte man auf jeden Fall davon ausgehen, dass das First schneller als das Count(*) ist, richtig?. |
AW: Select Count(*) vs. Select First 1
RecordCount wird am Client(!) ermittelt + kann bei genug Datensätzen lange brauchen, weil alle Datensätze abgerufen werden + gezählt werden. Das war auch nicht die Frage. :-/
select first 1 vs select Count(*) vs select count(1) vs select 1 ist alles gleich schnell. Da wiegt Netzwerk, Latenz und Parsezeit viel mehr. |
AW: Select Count(*) vs. Select First 1
Zitat:
Adaptive Server Anywhere z.B. meckert beim First rum, dass das Ergebnis nicht deterministisch sein würde. Zurecht, denn die DB-Engine weiß ja nicht, dass mir der Inhalte des zurückgelieferten Datensatzes in diesem Fall egal ist. Das umgeht man, indem ein Order By benutzt wird - und damit könnte wieder ein Full Table Scan drohen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 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 by Thomas Breitkreuz