Ich war in der gleichen Position, als ich meine Karriere als SQL Server DBA begann, studierte aber hauptsächlich ORACLE (10 g) an meiner Universität. Und das OCA-Zeug auch ...
Ich stimme @KennethFisher zu, dass beide RDBMS unterschiedlich sind und der Vergleich wie der Vergleich von Äpfeln und Orangen ist.
Um Ihre Frage zu beantworten: Speichern von Tischen als ausgewogene Bäume ...
- Sowohl Oracle als auch SQL Server unterstützen B-Tree- Indizes, die die Daten sortieren und Suchen, sequentiellen Zugriff, Einfügen und Löschen in logarithmischer Zeit ermöglichen.
- B-Tree ist gut für Systeme optimiert, die große Datenblöcke lesen und schreiben. Beachten Sie, dass SQL Server diese Struktur für nicht gruppierte Indizes verwendet und Oracle sie standardmäßig verwendet, um den Speicherort der Tabelle intern zu speichern.
- Oracle hat ein Konzept von ROWID (Zeilen-ID) und UROWID (universelle Zeilen-ID), bei dem in den Schlüsselwerten ein eindeutiger Verweis auf den Speicherort des Datensatzes enthalten ist, der den physischen Speicherort auf der Festplatte darstellt, auf dem der Datensatz gespeichert ist.
zB Referenzübersicht über ROWID- und UROWID-Datentypen
SELECT ROWID, last_name FROM employees WHERE department_id = 20;
ROWID LAST_NAME
------------------ ----------
AAAAaoAATAAABrXAAA BORTINS
AAAAaoAATAAABrXAAE RUGGLES
AAAAaoAATAAABrXAAG CHEN
AAAAaoAATAAABrXAAN BLUMBERG
Eine erweiterte Zeilen-ID hat das vierteilige Format OOOOOOFFFBBBBBBRRR:
OOOOOO: Die Datenobjektnummer, die das Datenbanksegment identifiziert (im Beispiel AAAAao). Schemaobjekte im selben Segment, z. B. ein Tabellencluster, haben dieselbe Datenobjektnummer.
FFF: Die tablespace-relative Datendateinummer der Datendatei, die die Zeile enthält (Datei AAT im Beispiel).
BBBBBB: Der Datenblock, der die Zeile enthält (Block AAABrX im Beispiel). Blocknummern beziehen sich auf ihre Datendatei und nicht auf den Tabellenbereich. Daher können sich zwei Zeilen mit identischen Blocknummern in zwei verschiedenen Datendateien desselben Tabellenbereichs befinden.
RRR: Die Zeile im Block.
- Daher sind die Konzepte sowohl in RDBMS - ORACLE als auch in SQL Server völlig unterschiedlich. Außerdem sind in Oracle erstellte PKs nichts anderes als ausgeglichene nicht gruppierte Indizes mit ROWID für den schnellen Zugriff und daher kein Konzept für gruppierte oder nicht gruppierte Indizes.
Jetzt wird dies interessanter und anders, wenn es um B + Tree- Indizes geht:
B + Tree-Strukturen ähneln B-Tree-Strukturen, aber die Tabellendatensätze (tatsächliche Daten) werden in den Blattknoten des Primärschlüsselindex gespeichert und ermöglichen einen schnellen Zugriff für exakte Übereinstimmungs- oder Bereichssuchsuchen in der PK der Tabelle.
Oracle verwendet sogenannte IOT (Index Organized Tables) und SQL Server verwendet sogenannte Clustered Indexes.
Schauen wir uns Clustered Indizes und Index Organized Tables (IOT) an ...:
Von Oracle Doc ,
Eine indexorganisierte Tabelle ist eine Tabelle, die in einer Variation einer B-Baum-Indexstruktur gespeichert ist. In einer Heap-organisierten Tabelle werden Zeilen dort eingefügt, wo sie passen. In einer indexorganisierten Tabelle werden Zeilen in einem Index gespeichert, der auf dem Primärschlüssel für die Tabelle definiert ist. Jeder Indexeintrag im B-Baum speichert auch die Nichtschlüsselspaltenwerte. Somit ist der Index die Daten und die Daten sind der Index. Anwendungen bearbeiten indexorganisierte Tabellen genau wie Heap-organisierte Tabellen mithilfe von SQL-Anweisungen.
Aus SQL Server Doc ,
In SQL Server sind Indizes als B-Bäume organisiert. Jede Seite in einem Index-B-Baum wird als Indexknoten bezeichnet. Der oberste Knoten des B-Baums wird als Wurzelknoten bezeichnet. Die unterste Ebene der Knoten im Index wird als Blattknoten bezeichnet. Alle Indexebenen zwischen der Wurzel und den Blattknoten werden zusammen als Zwischenebenen bezeichnet. In einem Clustered-Index enthalten die Blattknoten die Datenseiten der zugrunde liegenden Tabelle. Die Knoten der Stamm- und Zwischenebene enthalten Indexseiten mit Indexzeilen. Jede Indexzeile enthält einen Schlüsselwert und einen Zeiger auf eine Zwischenebene im B-Baum oder eine Datenzeile auf der Blattebene des Index. Die Seiten in jeder Ebene des Index sind in einer doppelt verknüpften Liste verknüpft.
- Statistiken für IOTs enthalten die physische Streuung von Zeilen, während SQL Server die physische Position der Zeilen in Statistiken nicht berücksichtigt. Daher ist der Clustered Index in SQL Server besser als ein HEAP - Daten werden nach dem Clustered Key sortiert und gute Schätzungen für die Daten erhalten gesucht werden.
Endlich ein paar gute Referenzen:
Ich werde weitere Punkte hinzufügen, die erwähnenswert sind ...
Eigentlich gibt es eine ziemlich einfache Antwort. Oracle und ähnliche RDBMS sind für die Verwendung von Heaps optimiert, während MS SQL Server und ähnliche für die Verwendung von Clustered-Indizes optimiert sind. Wenn Sie sich die Interna jedes Systems ansehen, werden Sie feststellen, dass ihr Design für die gewählte Methode ausgelegt ist. In diesem speziellen Fall sind also beide Gruppen von "Adepten" korrekt. In SQL Server funktionieren Tabellen mit Clustered-Indizes besser, in Oracle-Heaps besser (im Allgemeinen in beiden Fällen). Ich bin mir nicht sicher, ob einer der Ansätze im Allgemeinen besser oder schlechter ist. Es ist nur eine Frage der Präferenz der RDBMS-Designer. Und basierend auf dem, was ich über die Interna von MS SQL Server gesehen habe (ich habe die Interna von Oracle noch nicht studiert), bin ich mir nicht sicher, ob Sie ein RDBMS schreiben können, das in beide Richtungen gut funktioniert.
quelle