Soweit ich weiß (this page) erstellt Oracle automatisch einen Index für jede UNIQUE oder PRIMARY KEY Deklaration. Ist dies eine vollständige Liste von Fällen, in denen Indizes automatisch in Oracle erstellt werden?In welchen Fällen erstellt Oracle automatisch Indizes?
Antwort
Ich werde versuchen, gegebene Antworten zu konsolidieren und es Community-Wiki zu machen.
So Indizes werden von Oracle automatisch für solche Fälle geschaffen:
- APC: Für Primärschlüssel und eindeutige Schlüssel, sofern eine solche Indizes bereits vorhanden sind.
- APC: Für LOB-Speicher und XMLType.
- Gary: Für Tabelle mit einer geschachtelten Tabelle.
- Jim Hudson: Für materialisierte Ansicht.
Ja, das ist die vollständige Liste. Oracle erstellt automatisch einen Index für jede UNIQUE- oder PRIMARY KEY-Deklaration.
Laut der [angenommenen Antwort] (http://stackoverflow.com/a/2192193/521799) ist das nicht die vollständige Liste ... –
Erstens erstellt Oracle nicht immer einen Index, wenn wir einen primären oder eindeutigen Schlüssel erstellen. Wenn es auf dieser Spalte bereits ein Index ist, wird es es stattdessen ...
SQL> create table t23 (id number not null)
2/
Table created.
SQL> create index my_manual_idx on t23 (id)
2/
Index created.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SQL>
... beachten Sie, dass MY_MANUAL_IDX
kein eindeutiger Index ist; es spielt keine Rolle ...
SQL> alter table t23
2 add constraint t23_pk primary key (id) using index
3/
Table altered.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SQL> drop index my_manual_idx
2/
drop index my_manual_idx
*
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key
SQL>
Es gibt einen weiteren Fall, wenn Oracle einen Index automatisch erstellen: LOB Speicher ....
SQL> alter table t23
2 add txt clob
3 lob (txt) store as basicfile t23_txt (tablespace users)
4/
Table altered.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$
SQL>
bearbeiten
Die Datenbank behandelt XMLType selbe wie andere LOBs ...
SQL> alter table t23
2 add xmldoc xmltype
3/
Table altered.
SQL> select index_name from user_indexes
2 where table_name = 'T23'
3/
INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$
SYS_IL0000556081C00004$$
SQL>
Ich habe Oracle seit ein paar Jahren nicht gemacht, aber ich scheine um sich daran zu erinnern, dass Oracle einen zusammengesetzten Index verwenden könnte, wenn das Feld auf UNIQUE (oder PRIMARY KEY?) gesetzt ist. Ich könnte mich daran erinnern, oder es könnte sich seit der 8i-Linie geändert haben, also würde ich vorschlagen, es zu testen, wenn das nützlich wäre. (um einen zusätzlichen Index zu sparen und den Treffer zu schreiben) – Joe
Ein Beispiel ist immer großartig zum Verständnis. – Guru
@Joe - ja, deine Erinnerung ist korrekt. – APC
Nein, wir sind näher kommen, aber das ist noch nicht eine vollständige Liste.
Beim Erstellen der materialisierten Ansicht wird auch automatisch ein Index erstellt, da Oracle bei einer schnellen Aktualisierung die Zeilen schnell identifizieren muss. Für materialisierte Ansichten auf Rowid-Basis wird I_SNAP $ _tablename verwendet. Für materialisierte Ansichten des Primärschlüssels wird der ursprüngliche PK-Name verwendet, der bei Bedarf geändert wird, um ihn eindeutig zu machen.
create materialized view testmv
refresh force with rowid
as select * from dual;
select index_name from user_indexes where table_name = 'TESTMV';
Index Name
--------------
I_SNAP$_TESTMV
Und noch eine, wenn Sie eine Tabelle mit einer geschachtelten Tabelle erstellen, erhalten Sie einen Index automatisch erstellt. Objektbasierter Speicher kann dies im Allgemeinen tun, da versteckte Tabellen erstellt werden können.
Ich denke, Schema-basierte XMLTypes wird es auch tun.
- 1. In welchen Fällen sind Ausdrucksbäume nützlich?
- 2. In welchen Fällen benötigen wir geschützte Vererbung?
- 3. In welchen Fällen müssen wir <cassert> einschließen?
- 4. in welchen Fällen nicht scala richtig konvertieren String zu java.lang.String
- 5. In welchen Fällen verwenden wir native Abfrage und HQL-Abfrage?
- 6. In welchen Fällen gibt die Process.Start() -Methode false zurück?
- 7. In welchen Fällen muss Future.get() throw ExecutionException oder InterruptedException
- 8. Reorganisieren und Wiederaufbau Indizes automatisch
- 9. Welchen Vorteil haben NULL-Werte in Oracle?
- 10. unter welchen Fällen wäre LDAP vorzuziehen als Datenbank
- 11. Welchen Registrierungsschlüssel erstellt dieser Code?
- 12. Erstellt ein Primärschlüssel in mehreren Spalten Indizes für alle?
- 13. Welchen Leistungseinfluss haben nicht eindeutige Indizes in Pandas?
- 14. Warum erstellt 'git config' in einigen Fällen mehrere Konfigurationseinträge?
- 15. Welchen SQL-Datentyp weist Oracle "count (*)" zu?
- 16. Wie wählen und optimieren Sie Oracle-Indizes?
- 17. ORACLE EXCHANGE PARTITION und PARTITION INDIZES
- 18. Erstellt Hibernate automatisch Index?
- 19. ASP.NET erstellt nicht automatisch
- 20. Wie Zuhörer automatisch zu starten in Oracle
- 21. SQL Server-Indizes - aufsteigend oder absteigend, welchen Unterschied macht es?
- 22. PostgreSQL: SELECT INTO - Wie erstellt man Indizes?
- 23. Good Practice, um umgekehrte Indizes für Ersatzschlüssel zu verwenden? (Oracle)
- 24. Unter welchen Bedingungen wird eine JSESSIONID erstellt?
- 25. In welchen Fällen testen Sie anstelle einer Entwicklungsdatenbank eine In-Memory-Datenbank?
- 26. In welchen Fällen ist @finally nicht redundant in Cocoa's try/catch/finally Exception Handling?
- 27. In welchen Fällen wäre es nützlich, einen Befehl in eine Java For-Loop-Aktualisierungsanweisung aufzunehmen?
- 28. In welchen Fällen kann der Benutzer Berechtigungen (Laufzeit) widerrufen? (in Activity Lifecycle)
- 29. In welchen Fällen gibt "Select count (*)" vs. "Select count (*) AS" in PostgreSQL andere Ergebnisse?
- 30. Werden Mongodb-Backups automatisch erstellt?
Der Fall "LOB-Speicher" führt wahrscheinlich auch zu Indizes für andere komplexe Datentypen. Obwohl ich das nicht getestet habe. Ich würde erwarten, dass Indizes von Oracle Spatial, Oracle Text usw. erstellt werden. –
Es ist Community-Wiki. Wenn Sie etwas hinzufügen möchten, können Sie diese Antwort bearbeiten. –