Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wann sollte ich die indexorganisierte Tabelle von Oracle verwenden? Oder wann sollte ich nicht?

Grundsätzlich ist eine indexorganisierte Tabelle ein Index ohne Tabelle. Es gibt ein Tabellenobjekt, das wir in USER_TABLES finden können, aber es ist nur ein Verweis auf den zugrunde liegenden Index. Die Indexstruktur entspricht der Projektion der Tabelle. Wenn Sie also eine Tabelle haben, deren Spalten aus dem Primärschlüssel und höchstens einer weiteren Spalte bestehen, dann haben Sie einen möglichen Kandidaten für INDEX ORGANIZED.

Der Hauptanwendungsfall für indexorganisierte Tabellen ist eine Tabelle, auf die fast immer über ihren Primärschlüssel zugegriffen wird, und wir möchten immer alle ihre Spalten abrufen. In der Praxis handelt es sich bei indexorganisierten Tabellen höchstwahrscheinlich um Referenzdaten, Code-Nachschlage-Angelegenheiten. Anwendungstabellen sind fast immer in Haufen organisiert.

Die Syntax erlaubt es, dass ein IOT mehr als eine Nicht-Schlüsselspalte hat. Manchmal ist das richtig. Aber es ist auch ein Hinweis darauf, dass wir vielleicht unsere Designentscheidungen überdenken müssen. Wenn wir über die Notwendigkeit zusätzlicher Indizes für die Nicht-Primärschlüsselspalten nachdenken, sind wir mit einer normalen Heap-Tabelle wahrscheinlich besser dran. Da die meisten Tabellen wahrscheinlich zusätzliche Indizes benötigen, sind die meisten Tabellen nicht für IOTs geeignet.

Um auf diese Antwort zurückzukommen, sehe ich einige andere Antworten in diesem Thread, die Schnitttabellen als geeignete Kandidaten für IOTs vorschlagen. Dies erscheint vernünftig, da es üblich ist, dass Schnittmengentabellen eine Projektion haben, die mit dem Kandidatenschlüssel übereinstimmt:STUDENTS_CLASSES könnte eine Projektion von nur (STUDENT_ID, CLASS_ID) haben.

Ich glaube nicht, dass das Gusseisen ist. Schnittmengentabellen haben oft einen technischen Schlüssel (z.B. STUDENT_CLASS_ID). Sie können auch Nicht-Schlüsselspalten haben (Metadatenspalten wie START_DATE, END_DATE sind üblich). Außerdem gibt es keinen vorherrschenden Zugriffspfad – wir möchten alle Schüler, die einen Kurs belegen, so oft finden, wie wir alle Kurse finden möchten, die ein Schüler belegt – also brauchen wir eine Indizierungsstrategie, die beide gleichermaßen gut unterstützt. Ich sage nicht, dass Schnitttabellen kein Anwendungsfall für IOTs sind. nur dass sie es nicht automatisch sind.