Mario Steinko: Performance UPDATE vs. COUNT

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

  1. 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

    1. 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

      1. 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

        --
        Die deutschen Interessen werden am Liechtenstein verteidigt.
        Veranstaltungsdatenbank Vdb 0.3
        1. 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

          1. 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

  2. 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

  3. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.