Announcement

Collapse
No announcement yet.

Where Exists, um count(*) zu ersetzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Where Exists, um count(*) zu ersetzen

    Hallo #,
    <p>
    bis jetzt prüfe ich mit select count(*),<br>
    ob ein bestimmter Record vorhanden ist.
    <br>
    Mit Exists soll es ja schneller gehen.<br
    Nur wie sieht die SQL-Syntax aus, wenn ich die direkt eine Query benutzen will?<p>
    Mit Count<br>
    <pre>
    select count(*) from tab1
    where tab1.field=1
    </pre>
    <br>
    Nun das ganze mit exists
    <pre>
    select XXX
    where exists (select field1 from tab1 where tab1.field=1)
    </pre>
    <p>
    Das hat aber so doch nicht hin. Mit einer SP ist es ja kein Problem, aber ne normale Query ?
    <p>
    Danke im voraus
    <br>
    Heiko

  • #2
    Hallo,

    &gt;Mit Exists soll es ja schneller gehen.

    derartige pauschale Aussagen (ohne Bezug auf eine bestimmte Version eines bestimmten SQL Servers) würde ich sofort in die Tonne hauen.

    Im Zweifel muss man die mitgelieferten Werkzeuge des verwendeten SQL Servers bemühen, um sich die I/O-Statistik und den Rechnezeitverbrauch der beiden Alternativen anzuschauen

    Comment


    • #3
      Hallo,

      &gt;Mit Exists soll es ja schneller gehen.

      derartige pauschale Aussagen (ohne Bezug auf eine bestimmte Version eines bestimmten SQL Servers) würde ich sofort in die Tonne hauen.

      Im Zweifel muss man die mitgelieferten Werkzeuge des verwendeten SQL Servers bemühen, um sich die I/O-Statistik und den Rechnezeitverbrauch der beiden Alternativen anzuschauen.

      Beim MS SQL Server 2000 ist COUNT(*) deutlich effektiver als eine EXISTS-Unterabfrage (siehe Abbildung)

      Comment


      • #4
        Hallo Heiko,<BR><BR>
        <PRE>
        select * from kunde k
        where (select count(*) from rechnung r where r.kunde_id = k.kunde_id) > 0
        </PRE>
        entspricht
        <PRE>
        select * from kunde k
        where exists (select * from rechnung r where r.kunde_id = k.kunde_id)
        </PRE>
        Bei mir ist Select 2 schneller, da ja in der Tabelle Rechnung nur die Existenz eines Datensatzes vom Optimizer
        überprüft werden muss, während im Select 1 alle Datensätze in der Tabelle Rechnung je Kunde gezählt werden.<BR>
        Ob Exists immer schneller ist, kann ich nicht sagen.<BR><BR>
        Gruß, Fran

        Comment

        Working...
        X