Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Tabellen, Ansichten und Indizes » Indizes

 

Clustered-Indizes

Sie können umfangreiche Index-Scans weiter verbessern, indem Sie den Index als Clustered deklarieren. Die Verwendung eines Clustered-Indexes erhöht die Chance, dass zwei Zeilen aus benachbarten Indexeinträgen auch auf derselben Seite der Datenbank erscheinen. Dies kann zu weiteren Performance-Verbesserungen führen, da die Häufigkeit des Einlesens einer Tabellenseite in den Pufferpool reduziert wird.

Das Vorhandensein eines Indexes mit einer Clustered-Eigenschaft veranlasst den Datenbankserver, zu versuchen, Tabellenzeilen in ungefähr der gleichen Reihenfolge zu speichern, in der sie im Clustered-Index erscheinen. Während der Datenbankserver zwar versucht, die Schlüsselreihenfolge einzuhalten, ist das Clustering ein Annäherungsverfahren, und ein vollständiges Clustering kann nicht garantiert werden. Der Datenbankserver ist daher nicht in der Lage, die Tabelle sequenziell zu durchsuchen und alle Zeilen in der Schlüsselreihenfolge eines Clustered-Indexes abzurufen. Um sicherzustellen, dass die Tabellenzeilen in sortierter Reihenfolge geliefert werden, ist ein Zugriffsplan erforderlich, der entweder über den Index auf die Zeilen zugreift oder der einen physischen Sortiervorgang durchführt.

Der Optimierer nutzt einen Index mit Clustered-Eigenschaft, indem er die erwarteten Kosten eines indexierten Abrufs so abwandelt, dass die erwartete physische Nachbarschaft von Tabellenzeilen mit übereinstimmenden oder angrenzenden Indexschlüsselwerten berücksichtigt wird.

Der Umfang des Clustering für eine bestimmte Tabelle kann im Laufe der Zeit zurückgehen, wenn immer mehr Zeilen eingefügt oder aktualisiert werden. Der Datenbankserver zeichnet automatisch den Umfang des Clusterings für jeden einzelnen Clustered-Index in der Systemtabelle ISYSPHYSIDX auf. Falls der Datenbankserver feststellt, dass das Clustering der Zeilen in einer Tabelle erheblich abgenommen hat, passt der Optimierer seine erwarteten Indexabrufkosten an.

Wenn Sie vorhaben, einen der Indizes auf der Tabelle zu einem Clustered-Index zu machen, müssen Sie die erwartete Abfrage-Systemlast berücksichtigen. Dies wird üblicherweise ein Experimentieren erfordern. Im Allgemeinen kann der Datenbankserver einen Clustered-Index verwenden, um die Performance zu steigern, wenn die folgenden Bedingungen bei einer bestimmten Abfrage gelten:

  • Viele der Tabellenseiten, die für die Erfüllung der Abfrage benötigt werden, befinden sich noch nicht im Speicher. Wenn sich Tabellenseiten bereits im Speicher befinden, muss der Datenbankserver diese Seiten nicht lesen und eine Clusterbildung wäre sinnlos.

  • Die Abfrage kann durch einen Indexabruf erfüllt werden, von dem zu erwarten ist, dass er eine nicht-triviale Zeilenanzahl zurückgibt. Clusterbildung ist beispielsweise bei einfachen Primärschlüssel-Suchvorgängen meist irrelevant.

  • Der Datenbankserver muss, im Gegensatz zu einem reinen Indexabruf, die Tabellenseiten tatsächlich lesen.

 Deklarieren von Clustered-Indizes
 Siehe auch