Ist es sicher, legen Sie einen index in einer Oracle-Temporäre Tabelle?
Habe ich gelesen, dass sollte man nicht analysieren, eine temp-Tabelle, wie Sie die Schrauben, bis die Tabelle von Statistiken für andere. Was ist ein index? Wenn ich einen index für die Tabelle, für die Dauer meines Programms, können andere Programme mit Hilfe der Tabelle betroffen sein, die index?
Muss ein index auf meinen Prozess, und alle anderen Prozesse mit Hilfe der Tabelle?
oder Hat es Auswirkungen auf meinen Prozess allein?
Keiner der Antworten wurden, MAßGEBEND, so biete ich sagte zu bestechen.
InformationsquelleAutor EvilTeach | 2009-06-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich gehe davon aus wir reden von
GLOBAL TEMPORARY
Tabellen.Denke einer temporären Tabelle mehrere Tabellen erstellt und gelöscht, die von jedem Prozess auf das Fliegen aus einer Vorlage im system hinterlegt Wörterbuch.
In
Oracle
,DML
einertemporary table
wirkt sich auf alle Prozesse, während die Daten in der Tabelle enthalten nur Einfluss auf einen Prozess, der Sie verwendet.Daten in einem
temporary table
ist sichtbar nur innerhalb der session-scope. Es nutztTEMPORARY TABLESPACE
zum speichern von Daten und Indizes möglich.DML
für einetemporary table
(ich. e. das layout, einschließlich Spaltennamen und Indizes) ist für alle sichtbar mit ausreichenden Privilegien.Dies bedeutet, dass Existenz des index beeinflussen die Prozess-wie auch andere Prozesse mit Hilfe der Tabelle in den Sinn, dass jeder Prozess, der Daten ändert, die in der
temporary table
wird auch zum ändern des index.Daten in der Tabelle enthalten sind (und in der index auch), im Gegenteil, wird nur auf den Prozess, der Sie erstellt hat, und Sie wird auch nicht sichtbar für andere Prozesse.
WENN Sie möchten, einen Prozess zu verwenden, den index und eine weitere, es nicht zu verwenden, folgendermaßen Sie vor:
temporary tables
mit dem gleichen SpaltenlayoutInformationsquelleAutor Quassnoi
Ich nehme an, Sie meinen jetzt wahr Oracle, temporäre Tabellen und nicht nur eine normale Tabelle erstellt, vorübergehend und dann fallen gelassen. Ja, es ist sicher, erstellen von Indizes auf die temp-Tabellen und Sie werden nach den gleichen Regeln wie eine reguläre Tabellen und Indizes.
[Bearbeiten]
Ich sehe, Sie haben verfeinert Ihre Frage, und hier ist eine etwas verfeinerte Antwort:
Aus:
"Indizes können erstellt werden auf temporäre Tabellen. Sie sind auch temporäre und die Daten in den index der gleichen Sitzung oder Transaktion Umfang, wie die Daten in der zugrunde liegenden Tabelle."
Wenn Sie den index für die effiziente Verarbeitung während der Umfang der Transaktion, dann würde ich mir vorstellen, Sie haben explizit den Hinweis in der Abfrage, weil die Statistik zeigt keine Zeilen für die Tabelle.
Der index besteht für alle Sitzungen (so könnte Auswirkungen auf Ihre Verarbeitung und verursachen möglicherweise Probleme für Sie, wenn Sie einen eindeutigen index, und Sie erwarten, dass nicht-eindeutige Daten, oder sogar, wenn es nur verlangsamt Ihre inserts/updates). Auch das hinzufügen/löschen eines Indexes, der aus einer kurzen Sperre auf die Tabelle Ebenso können Sie sammeln Statistiken, die auf eine temporäre Tabelle, aber Sie würde davon ausgegangen werden, gelten für alle Abfragen auf die Tabelle, die möglicherweise oder möglicherweise nicht für Ihre situation geeignet.
>Gary Nein, der index ist gespeichert in genau der gleichen Weise, wie Sie in der Tabelle getrennt, in jeder Sitzung, so dass Sie nicht bekommen können Kollisionen zwischen den Sitzungen, auch wenn der index eindeutig ist. Offensichtlich hinzufügen/löschen von Indizes nimmt eine Sperre auf dem Tisch, aber wie oft gehen Sie zu add/drop-Indizes? Ja, Werte Global gelten, um temporäre Tabellen, das ist der Grund, warum manchmal müssen Sie die KARDINALITÄT Hinweis beim Abfragen von GTTs.
Ok, Gary und Jeff, Sie beide verstehen die Frage, aber haben scheinbar unterschiedliche Meinungen.
Meinungen sind nicht wichtig. Die Ergebnisse zählen - testen Sie es und sehen!
InformationsquelleAutor dpbradley
Du fragst nach zwei verschiedene Dinge, Indizes und Statistiken.
Für Indizes, ja, Sie können Indizes erstellen, die auf die temp-Tabellen, Sie werden gepflegt wie gewohnt.
Für die Statistik, ich empfehlen, dass Sie explizit den Statistiken der Tabelle repräsentieren die Durchschnittliche Größe der Tabelle, wenn diese abgefragt wird. Wenn Sie nur lassen Sie oracle sammeln, Statistiken von sich selbst, von den stats Prozess ist nicht zu finden, alles, was in den Tabellen (da per definition die Daten in der Tabelle ist lokale Transaktion), so wird es wieder ungenaue Ergebnisse.
können Sie z.B. tun:
exec dbms_stats.set_table_stats(user, 'my_temp_table', numrows=>10, numblks=>4)
Ein weiterer Tipp ist, dass, wenn die Größe der temporären Tabelle variiert stark, und innerhalb Ihrer Transaktion, die Sie wissen, wie viele Zeilen in der temp-Tabelle, die Ihnen helfen können, aus den optimizer, indem Sie die Informationen. Ich finde das hilft eine Menge, wenn Sie sich aus der temp-Tabelle zu regulären Tabellen.
z.B., wenn Sie wissen, die temp-Tabelle hat über 100 Zeilen, können Sie:
SELECT /*+ CARDINALITY(my_temp_table 100) */* FROM my_temp_table
Ich werde testen, die Verwendung der Kardinalität Hinweis. Vielen Dank +1
InformationsquelleAutor Chi
Gut, ich probierte es aus und der index sichtbar war, und von der zweiten Sitzung. Erstellen Sie eine neue Globale temporäre Tabelle für Ihre Daten wäre sicherer, wenn Sie wirklich brauchen einen index.
Sind Sie auch nicht imstande, einen index zu erstellen, wenn eine andere Sitzung ist der Zugriff auf die Tabelle.
Hier ist der test, falls ich ran:
InformationsquelleAutor Plasmer
Können Sie auch die dynamic-sampling Tip (10g):
select /*+ DYNAMIC_SAMPLING (3) */val
von index_test
wo val = 1;
Sehen Fragen Tom
InformationsquelleAutor diederikh
Können Sie nicht erstellen Sie einen index für eine temporäre Tabelle, während es verwendet wird, durch eine andere Sitzung, also Antwort ist: Nein, es kann sich nicht auf alle anderen Verfahren, weil es nicht möglich ist.
Einen vorhandenen Index wirkt sich nur auf die aktuelle Sitzung, weil bei jeder anderen Sitzung die temporäre Tabelle leer angezeigt, es kann also nicht Zugriff auf alle index-Werte.
Session 1:
Session 2 (während der session 1 ist immer noch angeschlossen):
Zurück zu session 1:
Session 2:
immer noch nicht, müssen Sie zunächst trennen session 1 oder Tabelle muss abgeschnitten werden.
Session 1:
Nun können Sie den index erstellen in Sitzung 2:
Dieser index natürlich verwendet werden, wird für jede Sitzung.
InformationsquelleAutor Wernfried Domscheit