2010-03-23 8 views
6

Ich greife über DB Link auf mehrere Tabellen zu. Sie sind sehr normalisiert und die Daten in jedem sind effektiv datiert. Von den Millionen von Datensätzen in jeder Tabelle sind nur eine Teilmenge von ~ 50k aktuelle Datensätze.Wie kann ich Abfragen für Tabellen beschleunigen, denen ich keine Indizes hinzufügen kann?

Die Tabellen werden intern von einem kommerziellen Produkt verwaltet, das eine große Anpassung verursacht, wenn ich Indizes hinzufüge oder Änderungen an seinen Tabellen in irgendeiner Weise vornehme.

Welche Möglichkeiten habe ich, um den Zugriff auf diese Tabellen zu beschleunigen?

+1

Blockiert dieses Programm auch partitionierte Tabellen? Denn wenn nicht, wäre es ein Weg zu gehen. – kurast

Antwort

9

Sie könnten versuchen, eine materialized view einer Teilmenge der Tabellen über den DB-Link zu erstellen und dann von diesen abzufragen.

2

Daten archivieren, die nicht mehr aktuell sind. (Oder, wenn das nicht akzeptabel ist, Daten, die einen gewissen Stalenness-Schwellenwert überschreiten, der für Ihre Anforderungen geeignet ist.)

4

Sie müssen sich die Pläne ansehen. Sie können möglicherweise die Reihenfolge der Joins ändern, Kriterien hinzufügen oder Hinweise bereitstellen, um sie schneller zu machen, aber ohne den EXPLAIN-Plan wissen Sie nicht, warum es langsam ist, sodass Sie nicht einmal wissen, ob Sie es schaffen können schneller.

2

Können Sie eine tägliche Dump der benötigten Datensätze in Ihre eigenen Datenbank/Tabellen nehmen?

6

Ich glaube, Sie zwischen einem Felsen und einem harten Platz hier stecken, aber in der Vergangenheit folgendes hat für mich gearbeitet:

Sie können in bestimmten Intervallen eine Momentaufnahme der aktuellen Daten nach unten ziehen, jede Stunde oder nächtlich oder was auch immer funktioniert, und fügen Sie Ihre Indizes nach Bedarf zu Ihren eigenen Tabellen hinzu. Wenn Sie auf die Daten in Echtzeit zugreifen müssen, können Sie versuchen, alle aktuellen Datensätze in eine temporäre Tabelle zu übernehmen und nach Bedarf zu indizieren.

Der zusätzliche Aufwand beim Kopieren von einer Datenbank in Ihre eigene kann den tatsächlichen Nutzen in den Schatten stellen, aber es ist einen Versuch wert.

1

Was ist mit dem Erstellen einer materialisierten/indizierten Ansicht? Das könnte ein bisschen helfen.

+1

Eine indizierte Sicht ist SQL Server-Terminologie - in Oracle heißen sie materialisierte Ansichten. –

Verwandte Themen