Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Select Count(*) vs. Select First 1 (https://www.delphipraxis.net/192839-select-count-%2A-vs-select-first-1-a.html)

TigerLilly 25. Mai 2017 07:16

AW: Select Count(*) vs. Select First 1
 
Zitat:

Zitat von IBExpert (Beitrag 1372691)
Zitat:

Zitat von TigerLilly (Beitrag 1372668)
Ob Tuning in einem solchen Bereich überhaupt Sinn hätte, wäre halt auch zu überlegen.

Naja, das Tuning generell ist schon extrem hilfreich, je größer die DB um so eher bringt das was, zumindest
bezogen auf firebird.

Cool, dass du das überprüft hast. :-)

Tuning ist wichtig, klar. Aber das worum es hier in dem Thread ging, ist Microtuning + weist in der Regel auf schlechtes Design hin. Oder Nerd-Interesse. 8-)

Womit die ursprüngliche Frage des TE beantwortet wäre?

jobo 25. Mai 2017 08:29

AW: Select Count(*) vs. Select First 1
 
Ja, harte Fakten sind cooler als bloßes Gerede.

Ich kann aber Deinen Ausführungen nicht folgen.
"Select Count(*) vs. Select First 1" ist microtuning und unwichtig?
(Normales) Tuning ist aber wichtig?

Der Begriff microtuning scheint mir außerdem nicht wirklich klar.
Wenn ich ihn definieren müsste, wäre es ganz sicher nicht die Frage ob First, Exists oder Count einzusetzen wäre.
Und was hat (micro)tuning- was immer es auch ist- mit schlechtem Design zu tun?

hoika 25. Mai 2017 09:00

AW: Select Count(*) vs. Select First 1
 
Hallo,
das betreffende Programm hat schon ein paar Jahre auf dem Buckel.
Ursprungs-DB war Interbase 4... Da gab es Select First nicht
Ich schaue mir auch alten SQL-Code z.B. per DB-Monitor an.

In meiner Test-DB fallen mir dann schon ein paar Sachen auf, ich oller Nerd...

Test-DB: "fully populate your Database"

p80286 25. Mai 2017 09:12

AW: Select Count(*) vs. Select First 1
 
Zitat:

Zitat von IBExpert (Beitrag 1372696)

Das ist an sich noch nichts wo man vor Erfurcht zusammenbrechen muss ...

sollst Du auch nicht, mir ging es eher darum klar zu machen, daß es in der Praxis vor dem Client ab einer gewissen Zeitspanne egal ist ob ein zwei Zehntel eingespart werden.

Gruß
K-H

TigerLilly 25. Mai 2017 09:15

AW: Select Count(*) vs. Select First 1
 
@jobo:
Tuning stelle ich mir gerne wie eine Pyramide vor: unten breit und oben schmal. Unten sind die wirklichen Basics: Datenstrukturen. Indizes. Hardware. Speicher. Platten.
Oben ist das, was ich Microtuning nenne, kleinste Maßnahmen in ganz isolierten Situationen. Wo man sich überlegt, ob die Länge von Tabellennamen Einfluss auf die Performance hat.

Meiner Erfahrung nach sind die Basiscs viel wichtiger. Wenn du unpassende Indizes hast, helfen schnelle Platten auch nichts. Wenn deine Datenstruktur die benötigten Zugriffspfade nicht unterstützt, helfen dir die perfekten Indices auch nicht weiter.

Tuningmaßnahmen ganz oben,wo es um das Ausreizen auch noch des kleinsten Performancegewinns geht, haben nur ganz selten Sinn. Das geht nur, wenn das System insgesamt ganz stabil ist + es so gut wie keine Änderungen mehr gibt. Und auch dann bedarf das dauernder Überprüfung und Steuerung.

Die ursprüngliche Frage des TE war, welches Konstrukt für das Feststellen der Existenz eines Datensatzes schneller ist.
Ich glaube, wenn man aus Performancegründen über so was nachdenken muss, stimmt was am Design nicht. Vielleicht wäre es besser, vorab Zwischendaten zu erzeugen, so dass man diese Abfrage gar nicht mehr braucht, oder man sorgt dafür, dass es immer genau einen Datensatz gibt, dann muss man auch nichts prüfen. Oder ich lagere das in eine StoredProcedure aus. Oder. Oder. Oder.

Meine Tuningmaßnahme muss als Einzelmaßnahme sinnvolle Wirkung zeigen (=Index beschleunigt eine WHERE Abfrage) und nicht erst durch Wiederholung (=ich spare 10ms ein, aber weil das in einer Schleife ist, die 1000x ausgeführt wird, sind das auch 10sec). Ersteres ist gut + sinnvoll, bei zweiterem sollten Alarmglocken läuten.

:-)

hoika 26. Mai 2017 12:42

AW: Select Count(*) vs. Select First 1
 
Hallo,
Microtuning?, den Begriff musste ich erst mal nachschlagen ;)

Zitat:

Ich glaube, wenn man aus Performancegründen über so was nachdenken muss, stimmt was am Design nicht.
Ich habe hier Code aus guten Interbase-Zeiten.
Wenn ich mit einer Änderung im SQL-Code eine neue Funktionalität meiner Datenbank nutze,
nenne ich das Optimierung. Wenn das First wieder erwarten langsamer wäre, würde ich natürlich den Code nicht anfassen.

Und klar ist es richtig:
Was nützt mir die besten Optimierung, wenn beim Kunden ein lahmer Server steht
oder das Netzwerk sehr langsam ist.

Und klar ist auch:
Ich aus 2 Mio. Einträgen wissen, ob ein bestimmter Eintrag mindestens einmal vorhanden ist, z.B. Daten eines Quartals.
Das Ergebnis sind z.B. 10.000 Einträge.
Ich könnte jetzt per Count(*) zählen und dann mit >0 prüfen, oder mir den ersten Wert geben und mit Is not Null prüfen.
Egal, ob ein Index vorhanden ist, auch dessen Pages müssen u.U. von der Festplatte geladen werden.

D.h., ich sage dem Kunden nicht, kaufe dir ne SSD, damit der Index schneller geladen wird, sondern ich ändere den Code ab,
so dass der Index eben nicht vollständig bzw. teilweise geladen werden muss.

bnreimer42 27. Mai 2017 12:20

AW: Select Count(*) vs. Select First 1
 
Zitat:

Zitat von hoika (Beitrag 1372805)
...

Und klar ist es richtig:
Was nützt mir die besten Optimierung, wenn beim Kunden ein lahmer Server steht
oder das Netzwerk sehr langsam ist.

Gerade da lohnt sich Tuning, denn da hat es Auswirkungen, die der Anwender merkt. Auf modernen schnellen Servern lohnt Mikrotuning meiner Ansicht nach nur, wenn eine Abfrage wirklich extrem oft läuft. Und da ist Caching im Client oder besser in er Middleware eine Option.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.
Seite 3 von 3     123   

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