2016-07-06 7 views
0

ich eine Aussage haben (in einfacher wir es so sehen konnte:)Oracle SQL - Vermeiden Sie vollständige Tabellen-Scan (wo)

Select * from VIEW where View.target='alpha' 

Die Ansicht mehrere Tabellen verwendet - Tabelle X, Y, Z zum Beispiel , und das Ziel wird in X sein. Die Ansicht gibt einen Datensatz von 2 Milliarden Zeilen zurück und mit dieser Abfrage lädt die Datenbank alle von ihnen und sucht, wo das Ziel gleich "Alpha" ist. Gibt es jetzt eine Möglichkeit, diese Abfrage schneller zu machen?

Vielleicht gibt es eine Möglichkeit, die Ansicht zu machen, von der ich ein bisschen kleiner (?) Ich denke, wenn ich die 'Ziel =' Alpha 'Aussage innerhalb der Ansicht machen könnte und die Ansicht wäre dann kleiner würde dies wirklich helfen ... aber ich denke, wenn ich diese Aussage innerhalb der Ansicht mache, wäre das Problem das gleiche, denn dann würde die Ansicht das gleiche tun (habe ich recht?)

Am Ende wäre es besser, wenn ich könnte habe die Ansicht wie sie ist und mache die Arbeit innerhalb der neuen Aussage, aber wenn jemand eine Idee hätte, die funktionieren würde, wenn ich die Ansicht ändere, könnte dies auch getan werden.

Vielen Dank!

+0

Die Optimierung der Abfrageausführung ist einer der Gründe, warum die DBAs vorhanden sind. Deine Frage ist zu allgemein. Ohne zu wissen, welche Tabellen dahinter stehen, ihre Statistiken, Indizes und Indexstatistiken, die Art der Abfragen, die gegen sie ausgegeben werden, wie sie gefüllt, geändert oder partitioniert werden usw., können Sie nicht optimieren. Fragen Sie Ihren DBA. Er hat das Wissen, es zu tun. Wenn Sie lernen möchten, wie es geht, können Sie hier beginnen https://docs.oracle.com/cd/E11882_01/server.112/e41573/perf_overview.htm#PFGRF94083 – Mottor

+0

http://tkyte.blogspot.de/ 2005/06/how-to-ask-questions.html –

Antwort

2

Eine Ansicht ist eine gespeicherte SQL-Anweisung, und um eine Ansicht schneller zu machen, müssen Sie die gespeicherte SQL-Anweisung schneller machen.

Die SQL-Anweisung hängt von Tabellen ab und beschleunigt die Abfrage von Tabellen, die Sie verwenden index. Die Vorteile mit Index sind reichlich, lesen Sie diese großartige Antwort auf eine SO-Frage here. Es erklärt, welcher Index ist, wie er funktioniert und warum er benötigt wird.

Um einen vollständigen Tabellenscan zu verhindern, fügen Sie Indizes hinzu, um die Abfrage schneller zu machen. In Ihrem Fall müssen Sie die Spalten in der SQL-Anweisung identifizieren, die für einen Index gut geeignet sind. Spalten, die normalerweise in WHERE-, ORDER BY-, JOIN- und GROUP BY-Klauseln verwendet werden, eignen sich gut für die Aufnahme in einen Index. In Ihrem Fall, schauen Sie sich die Tabelle an, in der die Zielspalte existiert. Beginnen Sie damit, dass Sie dort einen Index hinzufügen und dann mit den Beziehungen zu anderen Tabellen in der Abfrage fortfahren. Dies wird zu einer kürzeren Reaktionszeit führen, wenn Sie Ihre Ansicht verwenden.

Um Index auf Ihrer Oracle-Tabelle zu erstellen. Lesen Sie die Oracle-Dokumentation here

+0

Kann ich einen Index für eine View verwenden? Die Ansicht verwendet mehrere zu erstellende Tabellen, (z. B. Tabelle x, y, z) das Ziel wird in x wäre es hilfreich, wenn ich den Index für Tabelle x Ziel verwende? oder hätte das keinen Einfluss? Vielen Dank im Voraus! –

+0

Eine Ansicht ist eine gespeicherte SQL-Anweisung, für die Sie keinen Index erstellen können. Erstellen Sie den Index für die zugrunde liegenden Tabellen in der Ansicht, um die Leistung der Ansicht zu verbessern –

+0

Wenn Sie viele Tabellen in der Ansicht verknüpfen, sehen Sie sich die verbindenden Spalten zwischen den Tabellen an und erstellen Sie Indizes, die diese Spalten in jeder Tabelle enthalten. Dann wird die Leistung dieser Ansicht schneller sein, da die Joins Indizes verwenden werden. –