Announcement

Collapse
No announcement yet.

Sortierung von Select All & Select distinct ist unterschiedlich

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

  • Sortierung von Select All & Select distinct ist unterschiedlich

    Hallo zusammen,

    select ALL from tbl1, tbl2
    where tbl1.fld1 = tbl2.fld1

    bringt ein sortiertes Ergebnis.

    select DISTINCT from tbl1, tbl2
    where tbl1.fld1 = tbl2.fld1

    bringt ein UN-sortiertes Ergebnis.

    meine Installation:
    NT4.0 SERVER SP6
    MS-SQL 7.0 SP3

    Verschärfend kommt hinzu. Daß das Distinct-ergebnis je nach Kundeninstallation funktioniert und bei einer anderen Installation nicht;
    obwohl genau Gleich installiert wurde.

    Ich verstehts nicht.

    Ich hoff auf euch und danke schon im voraus für eure Hilfe.

    JOE

  • #2
    Hallo,

    die Theorie (SQL-Standard) sieht das folgende Verhalten vor: Alle SQL-Datenbanken speichern einen Datensatz in völlig unsortierter Reihenfolge (Menge). Eine SELECT-Abfrage liefert die Datensätze der Ergebnismenge nur dann in einer sortierten Reihenfolge zurück, wenn eine ORDER BY-Anweisung übergeben wurde. Fehlt ORDER BY, darf der SQL-Server je nach Belieben die Datensatzreihenfolge festlegen.

    Soweit zur Theorie - im Fall des Microsoft SQL Server 7/2000 hängt das Ergebnis einer SELECT-Abfrage ohne ORDER BY davon ab, wie der <b>Clustered Index</b> der betroffenen Tabelle(n) aufgebaut ist. Daher kommen die Daten beim normalen SELECT in der Reihenfolge der Einträge im clustered Index an. Allerdings ändert sich die Situation, wenn SELECT DISTINCT aufgerufen wird, denn in diesem Fall ist eine temporäre Tabelle im Spiel, über die die doppelten Datensätze der Ergebnismenge entfernt werden.

    Lange Rede - kurzer Sinn: Wenn man auf eine bestimmte Reihenfolge Wert legt, muss man ORDER BY angegeben.

    P.S: Über den Grund des unterschiedlichen Verhaltens beim Kunden kann ich nur spekulieren. Eventuell ist der Speicherausbau, die Prozessorauslastung oder die I/O-Leistung der Festplatte unterschiedlich, so dass der Optimizier des MS SQL Server die Zwischendaten einmal im Arbeitsspeicher und einmal als temp. Tabelle in tempdb anlegt

    Comment


    • #3
      Hallo Herr Kosch,

      hab zwischenzeitlich mal eine Indexanalyse über den Query Analyzer durchgeführt.
      Neuen Index eingefügt, und Bingo, schon läuft die Sache.
      Der Unterschied zu den "unterschiedlichen" Kundeninstallationen
      lag tatsächlich, wie Sie sagten in Unterschiedlichen Abfragepläne.
      Aber Jetzt läufts.

      Vielen Dank Herr Kosch.
      *meinenHutziehend

      Comment

      Working...
      X