Ist das Konzept eines Clustered-Index in einem DB-Entwurf bei Verwendung von SSDs sinnvoll?

44

Ist es sinnvoll, beim Entwerfen eines SQL Server-Datenschemas und der nachfolgenden Abfragen, Sprocs, Ansichten usw. zu berücksichtigen, dass DB-Entwürfe explizit für die Bereitstellung auf SSD-Plattformen erstellt wurden.

http://msdn.microsoft.com/en-us/library/aa933131(v=sql.80).aspx
"Ein Clustered-Index bestimmt die physische Reihenfolge der Daten in einer Tabelle."

Auf einer physischen Festplattenplattform ist es für mich sinnvoll, sie zu berücksichtigen, da ein physischer Scan der Daten zum Abrufen "sequenzieller" Zeilen leistungsfähiger sein kann als ein Durchsuchen der Tabelle.
Auf einer SSD-Plattform wird für alle Datenlesezugriffe eine identische Suche verwendet. Es gibt kein Konzept für "physikalische Reihenfolge" und Datenlesevorgänge sind nicht "sequentiell" in dem Sinne, dass Bits auf demselben Stück Silizium gespeichert sind.

Ist beim Entwerfen einer Anwendungsdatenbank die Berücksichtigung des Clustered-Index für diese Plattform relevant?

Mein erster Gedanke ist, dass dies nicht darauf zurückzuführen ist, dass die Idee der "bestellten Daten" nicht für die Speicherung von SSDs und die Optimierung von Such- und Wiederherstellungsvorgängen gilt.

BEARBEITEN: Ich weiß, dass der SQL Server einen erstellen wird. Ich überlege nur, ob es Sinn macht, während des Entwurfs / der Optimierung darüber nachzudenken.

Matthew
quelle
1
Einige Artikel zu diesem allgemeinen Thema (nicht spezifisch für Ihre Frage) Müssen Abfrageoptimierer SSD-fähig sein? und Abfrageverarbeitungstechniken für Solid-State-Laufwerke
Martin Smith

Antworten:

34

Stellen Sie sich eine andere Frage: Wenn sich die gesamte Datenbank im Arbeitsspeicher befindet und ich die Festplatte nie berühren muss, möchte ich meine Daten in einem geordneten B-Baum oder in einem ungeordneten Haufen speichern?

Die Antwort auf diese Frage hängt von Ihrem Zugriffsmuster ab. In den meisten Fällen sind für Ihren Zugriff Such- und Entfernungsscans für einzelne Zeilen erforderlich. Diese Zugriffsmuster erfordern einen B-Tree, andernfalls sind sie ineffizient. Einige andere Zugriffsmuster, die in DW und OLAP üblich sind, führen immer Aggregate über die gesamte Tabelle durch und profitieren nicht von Bereichsüberprüfungen. Im weiteren Verlauf des Drill-Vorgangs werden andere Anforderungen deutlich, z. B. die Geschwindigkeit des Einfügens und Zuordnens in einen Heap im Vergleich zu B-Tree. In den meisten Fällen läuft die Antwort auf eine Frage hinaus: Suchen Sie nach einem Such- oder Entfernungsscan? Die überwältigende Anzahl der Antworten lautet JA. Und daher ist für das Design in der überwiegenden Anzahl ein Clustered-Index erforderlich.

Mit anderen Worten: Nur weil es billig ist, es in zufälliger Reihenfolge von der Festplatte zu lesen, bedeutet dies nicht, dass Sie Ihre TLBs und L2-Leitungen in einem 64-GB-RAM-Scan-Bonanza entsorgen können ...

Remus Rusanu
quelle
Die Kosten für das Nachschlagen der Zeile im Basisheap, auch im Speicher, sind immer höher als die Kosten für das Abrufen der Zeile direkt in der Suche. Nicht nur von der Stelle des Speicherzugriffs, sondern auch von der Anzahl der beteiligten Anweisungen (Die Suche ist im Grunde eine Verknüpfung mit allen Verknüpfungsoperatoren).
Remus Rusanu
23

Wenn Sie einen gut ausgewählten Clustered-Index verwenden, erhalten Sie mit größerer Wahrscheinlichkeit alle zugehörigen Daten, die Sie benötigen, auf weniger Datenseiten. Das heißt, Sie können die benötigten Daten in weniger Speicher halten. Dies bietet einen Vorteil, unabhängig davon, ob Sie rotierende Festplatten oder SSDs verwenden.

Sie haben jedoch Recht, dass der andere Vorteil eines Clustered-Indexes - sequentielles Lesen / Schreiben von Daten anstelle vieler Festplattensuchen - für SSD kein wesentlicher Vorteil ist sind mit rotierenden Scheiben.


Re @ Matthew PK Kommentar.

Natürlich ist Position A im RAM genauso schnell wie Position B im RAM. Das ist nicht der Punkt. Ich spreche über den Fall, dass nicht alle benötigten Daten in den Arbeitsspeicher passen, wenn die Daten auf viele Seiten verteilt sind. Jede Seite enthält möglicherweise nur eine geringe Menge an Daten, die Sie interessieren. Daher muss das RDBMS beim Zugriff auf A, B und andere Zeilen weiterhin Seiten laden und bereinigen. Hier bekommst du die Leistungsstrafe.

Es ist besser, wenn jede Seite voll von Daten ist, an denen Sie interessiert sind, in der Hoffnung, dass alle nachfolgenden Zeilenanforderungen von Seiten im RAM bedient werden. Mit einem Clustered-Index können Sie sicherstellen, dass Ihre Daten auf weniger Seiten gruppiert sind.

Bill Karwin
quelle
13

Ja, es macht absolut noch Sinn. Sie denken in Ihrer Herangehensweise zu niedrig. SQL Server (in einer sehr stark vereinfachte Erklärung) speichern Daten in einer B-Baum - Architektur geclustert. Dies ermöglicht ein schnelles Abrufen von Daten basierend auf den Werten des gruppierten Indexschlüssels.

Ein Heap (kein Clustered-Index) hat keine sequentielle Reihenfolge der Daten. Das Wichtigste dabei ist, dass in einem Heap die Datenseiten nicht in einer verknüpften Liste verknüpft sind .

Die Antwort lautet also "Ja". Es ist immer noch sinnvoll, Clustered-Indizes für Tabellen zu erstellen, selbst für eine SSD. Alles hängt davon ab, wie viele Daten SQL Server durchsuchen muss, um an die resultierenden Daten zu gelangen. Bei einer Clustered-Index-Suche wird sie minimiert.

Referenz: http://msdn.microsoft.com/en-us/library/ms189051.aspx

Thomas Stringer
quelle
Es wird einen Clustered-Index geben. Es ging darum, ob es auf der SSD-Plattform darauf ankommt oder nicht
Matthew,
5
Ja, das ist wichtig. 3 Lesevorgänge im Gegensatz zu 300 Lesevorgängen sind unabhängig vom verwendeten Medium schneller.
Thomas Stringer