Thema: Delphi Sinn und Zweck von Any??

Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#10

Re: Sinn und Zweck von Any??

  Alt 24. Mär 2009, 16:07
Zitat von JumpFrog:
Da kommt wieder die Frage wieso gerade den kleinsten Wert? Ich begründe das jetzt einfach mit dem >
Jupp. Naja, fast.

Du kannst bei ANY ja jeden Operator nehmen.

= ANY (Unterabfrage) heisst ja, dass der Wert mit irgend einem in der Unterabfrage (egal welcher) identisch übereinstimmen muss. Das ist natürlich für jeden unterschiedlichen Wert X in der Hauptabfrage ein anderer Wert in der Unterabfrage, sofern dieser überhaupt existiert.

ANY > heisst eben, dass der Wert größer als irgend einer in der Unterabfrage ist.
Und wie prüfst Du am einfachsten, ob viele Werte X (Hauptabfrage) größer als irgend ein Eintrag in einer anderen Liste sind? Du gehst her, und suchst Dir den kleinsten Wert aus der Liste, weil wenn Du da drüber bist, bist Du auf jeden Fall > ANY.

Die Datenbank wird, sofern vorhanden, aller Wahrscheinlichkeit nach einen Index zur Suche und zum Vergleich verwenden. Je nach Größe des Index kann es also schon sehr gut sein, das für den eigentlichen Vergleich ein größerer Wert hergenommen wird. Aber für > ANY gibts halt eine untere Schranke, und die wird zwangsläufig durch den kleinsten Wert bestimmt. Bei < ANY wäre es eben der größte, bei != ANY reicht ja auch irgend ein Wert in der Unterabfrage, der anders als der Vergleichswert ist.

Es kommt eben schon auf den Operator an, welcher Wert ausschlaggebend ist.
Nur ein Vergleich auf einen einzelnen Wert (SELECT TOP1 value FROM ORDER BY value ASC) ist sicher schneller als der Vergleich gegen eine Menge von Werten (ANY).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat