2009-08-31 12 views
8

Ich möchte herausfinden, ob es einen Leistungsvorteil für die Partitionierung einer numerischen Spalte gibt, die oft 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).Ist ein global partitionierter Index besser (schneller) als ein nicht partitionierter Index?

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 mir sicher, dass dies, wie viele Oracle-Fragen, mit einem "es kommt auf" beantwortet werden kann. :) Ich bin daran interessiert zu lernen, welche Faktoren ich berücksichtigen sollte, um die Vorteile jedes Ansatzes zu bestimmen.

Dank!

Antwort

4

Ich bin mir ziemlich sicher, dass Sie diese Referenz in Ihrer Forschung gefunden haben - Partitioned Tables and Indexes. Ich gebe jedoch einen Link, wenn jemand interessiert ist, das ist ein sehr gutes Material über Partitionierung.

Direkt auf den Punkt - Partitioned Index zerlegt nur den Index in Stücke (16 in Ihrer Situation) und verteilt die Daten in Abhängigkeit ihrer 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.

Wissen, wie Indexsuche funktioniert, auf wirklich großen Daten Ich denke, es ist besser, den partitionierten Index zu wählen, um den Indexbaum zu verringern, den Sie durchqueren (regulärer Index). Es hängt wirklich von den Daten ab, die in der Tabelle enthalten sind (wie der reguläre Indexbaum zusammengesetzt ist) und ist Hashing und direkter Sprung zum niedrigeren 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.