Ist ein global partitionierter Index besser (schneller) als ein nicht partitionierter Index?

8

Ich möchte herausfinden, ob es einen Leistungsvorteil für die Partitionierung einer numerischen Spalte gibt, die häufig das Ziel einer Abfrage ist. Derzeit habe ich eine materialisierte Ansicht, die ~ 50 Millionen Datensätze enthält. Wenn ich einen regulären B-Tree-Index verwende und nach dieser numerischen Spalte suche, erhalte ich Kosten von 7 und Abfrageergebnisse in ungefähr 0,8 Sekunden (mit nicht-geprimtem Cache). Nach dem Hinzufügen einer globalen Hash-Partition (mit 64 Partitionen) für diese Spalte erhalte ich Kosten von 6 und Abfrageergebnisse in etwa 0,2 Sekunden (wiederum mit nicht-grundiertem Cache).

Meine erste Reaktion ist, dass der partitionierte Index die Leistung meiner Abfrage verbessert hat. Ich stelle jedoch fest, dass dies nur ein Zufall sein kann und völlig abhängig sein könnte von den Werten, die gesucht werden, oder anderen, die mir nicht bewusst sind. Meine Frage ist also: Gibt es einen Leistungsvorteil beim Hinzufügen einer globalen Hash-Partition zu einer numerischen Spalte in einer großen Tabelle oder bei der Ermittlung der zu scannenden Indexpartitionen - gewichtet nach den Kosten einer vollständigen Bereichsüberprüfung auf einer nicht indizierte Partition?

Ich bin sicher, dass dies, wie viele Oracle-Fragen, mit einem "es kommt darauf an" beantwortet werden kann. :) Ich bin interessiert zu lernen, welche Faktoren ich berücksichtigen sollte, um die Vorteile jedes Ansatzes zu bestimmen.

Danke!

    
Kevin Babcock 31.08.2009, 17:35
quelle

1 Antwort

4

Ich bin mir ziemlich sicher, dass Sie diese Referenz in Ihrer Recherche gefunden haben - Partitionierte Tabellen und Indizes . Allerdings gebe ich einen Link, wenn jemand interessiert ist, das ist ein sehr gutes Material über Partitionierung.

Gerade auf den Punkt - Partitioned Index zerlegt nur den Index in Stücke (16 in Ihrer Situation) und verteilt die Daten in Abhängigkeit von ihrem Hash-Partitionierungsschlüssel. Wenn Sie es verwenden möchten, "berechnet" Oracle den Hash des Schlüssels und legt fest, in welchem ​​Abschnitt die Suche fortgesetzt werden soll.

Ich weiß, wie die Indexsuche funktioniert, bei wirklich riesigen Daten ist es besser, den partitionierten Index zu wählen, um den Indexbaum, den Sie durchlaufen, zu verkleinern (regulärer Index). Es hängt wirklich von den Daten ab, die sich in der Tabelle befinden (wie der reguläre Indexbaum zusammengesetzt ist) und ist Hashing und direkterer Sprung zum unteren Knoten schneller als der normale Baumdurchlauf vom Startknoten.

Schließlich müssen Sie mit den Testergebnissen sicherer sein. Wenn eine Technik bessere Ergebnisse für Ihre genauen Daten liefert als andere, müssen Sie sich keine Sorgen machen, sie zu implementieren.

    
Svetlozar Angelov 02.09.2009, 12:50
quelle