Performance UPDATE vs. COUNT
Mario Steinko
- webserver
0 Jens Holzkämper0 Mario Steinko0 Auge
0 bleicher0 MudGuard
Hi!
Hat ein einfacher 'SELECT x FROM a WHERE id=y' und ein 'UPDATE a set x WHERE id=y' einen deutlichen Performance-Vorteil/Nachteil gegenüber 'SELECT COUNT(*) as x WHERE id=y' und 'SELECT COUNT(*) as z WHERE id=y und anything=z'?
Was ist wem vorzuziehen?
Gibts ne Möglichkeit die zwei COUNT() der 2. Variante in eine Abfrage zusammenzufassen?
Danke
Mario
Tach,
Hat ein einfacher 'SELECT x FROM a WHERE id=y' und ein 'UPDATE a set x WHERE id=y' einen deutlichen Performance-Vorteil/Nachteil gegenüber 'SELECT COUNT(*) as x WHERE id=y' und 'SELECT COUNT(*) as z WHERE id=y und anything=z'?
Was ist wem vorzuziehen?
also ich mag ja Äpfel deutlich lieber als Birnen. Vielleicht ist es auch einfach zu spät um noch zu sehen, wie man ein Select und ein Update, die nicht verknüpft sind, mit zwei Selects, die nicht verknüft sind, vergleichen kann.
mfg
Woodfighter
Hey!
Was hat das mit Apfel vs. Birnen zu tun?
Es geht um performance, beide Abfragen brauchen eine gewisse Zeit, also warum kann man denn die Zeit ned miteinander vergleichen???
lg
Mario
Hallo
Was hat das mit Apfel vs. Birnen zu tun?
Es geht um performance, beide Abfragen brauchen eine gewisse Zeit, also warum kann man denn die Zeit ned miteinander vergleichen???
Weil alle deine Abfragen unterschiedliches tun. Wenn du mit zwei verschiedenen Abfragen das selbe Ziel erreichtest, könntest du nach den Unterschieden in der Performance beider Abfragen suchen. Aber was nützt diese Aufgabenstellung, wenn die eine Abfrage einen Datensatz ausliest und die andere einen solchen ändert? Das eine ist ein Apfel, das andere eine Birne.
Tschö, Auge
Nein, denn sie würden den gleichen Sinn erfülllen - deshalb hab ichs ja so gepostet ;)
Is is jedoch eine relativ komplizierte Sache weshalb ich es kurz halten wollte, hier die kurze Erklärung:
zu Variante 1:
Beim SELECT wird ein Wert (a oder b) ausgegeben, das entsprechende Element angezeigt und (zusätzlich zum normalen db eintrag) in einer zweiten Tabelle das genau andere Element gespeichert (das, was bei der nächsten Anzeige angezeigt werde soll). => 1 SELECT & 1 UPDATE
zu Variante 2
Die 2 COUNT-Abfragen würden entscheiden was angezeigt wird, nach folgender Regel (1. COUNT = x, 2. COUNT = z)
x/2>z => a anzeigen
else => b anzeigen
Aus diesem Grund kam ich zum Vergleich, ich würd mich auf Antworten zu meiner Frage freuen!
lg
Mario
Hallo Mario,
Aus diesem Grund kam ich zum Vergleich, ich würd mich auf Antworten zu meiner Frage freuen!
Bitte stelle ein Beispiel zusammen: mit einer Tabelle, 7-10 Datensätzen und dem gewünschten Ergebnis, sowie der Begründung, warum das Ergebnis genau so gewünscht ist.
Aus syntaktisch falschem SQL kann man nicht erschließen, was Du willst - und Deine Erklärung im Beitrag, auf den ich gerade antworte, habe ich erst recht nicht verstanden.
In den meisten Fällen ist es keine gute Idee, Daten zu verändern, wenn man nur welche auswählen will. Das Füllen temporärer Tabellen ist eine Ausnahme ...
Dein Datenbankmanagementsystem (DBMS) stellt Dir vermutlich Hilfsmittel zur Verfügung, um den Ausführungsplan oder den Aufwand Deiner Queries zu ermitteln. Nutze diese.
Vielleicht können Dir Stored Procedures helfen - falls Dein DBMS diese kennt.
Freundliche Grüße
Vinzenz
Grüße,
die sicherste methode wäre ein versuch - probiers doch einfach aus :)
erstelle eine tabelle mit paar hundert einträgen oder mehr - und lass die anfragen laufen - ein versuch wird mehr zeigen als 100 vermutungen.
MFG
bleicher
Hi,
Hat ein einfacher 'SELECT x FROM a WHERE id=y' und ein 'UPDATE a set x WHERE id=y'
M.W. ist letzteres syntaktisch nicht zulässig, bei einem set muß ein Wert angegeben werden.
einen deutlichen Performance-Vorteil/Nachteil gegenüber 'SELECT COUNT(*) as x WHERE id=y' und 'SELECT COUNT(*) as z WHERE id=y und anything=z'?
auch hier ist letzteres syntaktisch nicht zulässig - mir ist kein SQL-Dialekt bekannt, der deutsche Schlüsselworte erkennt, und FROM fehlt.
Hier ist auch das erste Statement falsch - FROM fehlt.
Die jeweils zweiten statements dürften sich in der Performanz kaum unterscheiden, der Syntax-Fehler wird ziemlich schnell erkannt.
Bleiben die jeweils ersten Statements:
Den Syntax-Fehler im zweiten Statement zu erkennen geht schneller als das Auswählen der Datensätze für das erste Statement.
Was ist wem vorzuziehen?
Gibts ne Möglichkeit die zwei COUNT() der 2. Variante in eine Abfrage zusammenzufassen?
Solltest Du anstelle der syntaktisch falschen statements die syntaktisch korrekten Statements meinen:
Beide Varianten sind, wie die anderen schon erwähnt haben, nicht vergleichbar: das eine ändert die Datenbank, das andere nicht.
cu,
Andreas