PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Bei welcher Kardinalität wechselt SQL Server zu einem Index-Scan (vs. Seek)

In Bezug auf SQL Server wurde dies als der Wendepunkt bezeichnet, über den Kimberleys Blogbeitrag gut zu lesen ist. http://www.sqlskills.com/BLOGS/KIMBERLY /category/The-Tipping-Point.aspx

Der Wendepunkt ist eine Richtlinie von 25 % bis 33 % der Gesamtseitenzahl innerhalb der Tabelle, ausgedrückt als Zeilen, z. 10.000 Datenseiten würden einen Wendepunkt von 2500-3333 Zeilen ergeben. Was die Richtlinien anbelangt, ist das ziemlich gut und so gut, wie Sie es bekommen werden - denken Sie daran, dass die Abfrageplan-Engine eine Blackbox ist, und obwohl sie Ihnen einen Abfrageplan liefert, sagt sie nur, was sie entschieden hat, nicht warum.

Was das Kippen eines abdeckenden Index betrifft, ist das jedoch nicht ganz einfach, selbst wenn 100 % der Daten ausgewählt werden, wird ein abdeckender Index in den meisten Fällen immer noch einen Overscan suchen.

Das macht Sinn, wenn man bedenkt, dass der Kostenoptimierer der Indexseiten-Hierarchie keine wirklichen Kosten zuweist, sondern nur den Zugriff auf die Blattseiten des Index. An diesem Punkt kostet das Scannen oder Suchen von 100 % eines abdeckenden Indexes die gleichen Kosten.

Ich habe aus meinen eigenen Experimenten herausgefunden (http://sqlfascination.com/2009/11/07/can-a-covering-nc-index-be-tipped ) Die Verwendung einer between-Klausel würde zum Scannen führen, andere where-Klauseln jedoch nicht - soweit ich das beurteilen konnte, lag es nur an der Route durch die Abfrage-Engine.