2008-08-26 7 views
5

Wie bestimmen Sie, wann Sie table clusters verwenden sollen? Es gibt zwei Arten, Index und Hash, die für verschiedene Fälle verwendet werden. Haben sich nach Ihrer Erfahrung die Einführung und Nutzung von Tischgruppen gelohnt?Wann verwenden Sie Tabellencluster?

Wenn keine Ihrer Tabellen auf diese Weise eingerichtet ist, würde die Anpassung der Tabellencluster zur Komplexität der Einrichtung beitragen. Aber würden die erwarteten Leistungsvorteile die Kosten erhöhter Komplexität bei zukünftigen Wartungsarbeiten überbewerten?

Haben Sie online Referenzen oder Bücher, die Tabellenclustering gut beschreiben und gute Implementierungsbeispiele geben?

// Oracle Tipps sehr geschätzt.

Antwort

1

Ich habe Oracle-Tabellencluster nicht selbst verwendet, aber ich verstehe, dass seine Indextabellencluster den Clusterindizes von MS SQL Server sehr ähnlich sind. Das heißt, die Zeilendaten werden physisch durch den Schlüssel des gruppierten Indexes organisiert.

Das ist ideal für eine stark besuchte Spalte, die eine relativ geringe Anzahl möglicher Werte (im Vergleich zur Gesamtzahl der Zeilen) aufweist, wobei die meisten Abfragen alle Zeilen mit einem bestimmten Wert abrufen möchten. Da alle diese Zeilen physikalisch zusammen gespeichert sind, wird die Platten-E/A, insbesondere die Suchzeit, reduziert.

"Ziemlich klein" ist nicht einfach zu definieren, aber Postleitzahlen in einer Adresstabelle erscheinen sinnvoll, wenn Sie häufig nach allen Adressen in der Region eines einzelnen Codes suchen. Länder-/Länder-/Gebietscodes sind wahrscheinlich eine zu kleine Auswahl für eine landesweite Adresstabelle.

Also, Sie wollen sie nicht auf Spalten mit wenigen möglichen Werten (z. B. M/F für Geschlecht) verwenden, weil dann das Clustering nichts kauft und Sie wahrscheinlich für Einfügungen kostet. Sie wollen auch niemals Clustering auf "autonumber" Ersatzschlüsselspalten (von Sequenzen in Oracle) verwenden, da dies einen "Hot Spot" im letzten Bereich der Tabelle erzeugen wird, da alle Einfügungen dort physisch passieren müssen. Sie möchten auch kein Clustering auf einen Spaltenwert anwenden, der aktualisiert wird, da das RDBMS den Datensatz physisch verschieben muss, um die gruppierte Sortierung beizubehalten.

+0

Oracle-Tabellencluster sind nicht wie gruppierte SQLServer-Indizes. –

+0

Es tut mir leid, dass ich so viel später gefragt habe, aber ich habe keinen weiteren Hinweis gefunden: Gibt es so etwas wie die Tabellencluster von Oracle in MSSQL? – landi

7

Das beste Feature von Tabellenclustern ist, dass Sie verwandte Zeilen verschiedener Tabellen am gleichen physischen Speicherort speichern können.

Das kann die Join-Leistung um eine Größenordnung verbessern. Es zahlt sich jedoch nicht so oft aus, wie es sich anhört.

Die einzige Zeit, die ich es verwendet wurde, war eine Drei-Tabellen-Join, ausgeführt von zwei Hash-Joins. Es hat zu lange gedauert;). Da sich der Join jedoch in derselben Spalte befand, war es möglich, einen Hashtabellencluster zu verwenden, der von der Join-Spalte codiert wurde. Dadurch wurden alle zugehörigen Zeilen nebeneinander gespeichert (idealerweise im selben Datenbankblock). Wenn Sie das wissen, kann Oracle den Join mit einer speziellen Optimierung ausführen ("cluster join").

Es ist mehr oder weniger bereits verbunden, aber immer noch wie normale Tabellen (für INSERT/SELECT/UPDATE/DELETE).

Auf der anderen Seite gibt es "Single-Table-Cluster", die meist verwendet werden, um den "Clustering-Faktor" zu steuern - Eine ähnliche Idee wie Clustered-Indizes (Index-Organized-Tabelle in Oracle), aber keine hohen Kosten hinzufügen wenn ein sekundärer Index verwendet wird.

2

man viel über Clustering sprechen kann, aber ich fand, dass fast ultimative Erklärung über Oracle Cluster (Vor-und Nachteile, wann und zu verwenden, wie zu verwenden) können in Tom Kyte Buch zu finden - Effective Oracle by Design, können Sie auch Suche nach für einige spezifische Cluster-Verwendungsbeispiele (1, 2 usw.). Sie sollten sich dieses Buch unbedingt ansehen, wenn Sie es noch nicht getan haben.

Einige Informationen finden Sie auch here.

Aber das, was Sie immer vor dem Erstellen von komplexen Schema Strukturen tun sollten, ist zu versuchen, zu testen, zu Benchmark und wählen Sie die Lösung, die am besten zu Ihren Bedürfnissen passt :)

Hoffnung, das hilft.