2010-11-24 7 views
11

Gibt es eine effizientere Art und Weise als:Wie macht man eine SQL-Auswahl über mehrere Partitionen?

select * from transactions partition(partition1) 
union all 
select * from transactions partition(partition2) 
union all 
select * from transactions partition(partition3); 
+2

Was bedeutet effizient in diesem Fall? Weniger tippen? schnellere Ergebnisse? – EvilTeach

+0

Schnellere Ergebnisse. – Yusufk

Antwort

14

Es außerordentlich selten vor, dass Sie die Partition (partitionN) Syntax in einer Abfrage verwenden soll.

Normalerweise würden Sie nur Werte für den Partitionsschlüssel angeben und Oracle die Eliminierung der Partition ermöglichen. Wenn Ihre Tabelle täglich auf TRANSACTION_DATE basierend partitioniert ist, zum Beispiel

SELECT * 
    FROM transactions 
WHERE transaction_date IN (date '2010-11-22', 
          date '2010-11-23', 
          date '2010-11-24') 

würde wählen Sie alle Daten von den heutigen Partition, gestern Partition und am Tag vor der Partition an.

+0

Ok, ich war mir nicht sicher, ob Oracle seine Suche auf die relevante Partition beschränken würde, das macht Sinn. Ich habe eine riesige Tabelle, stündlich partitioniert, die ich für Daten abfragen muss, die Tage umfassen. Vielen Dank – Yusufk

-1

Können Sie zusätzlichen Kontext bereitstellen? Was sind deine Prädikate? Was bringt Sie auf den Gedanken, dass Sie das Optimierungsprogramm explizit anweisen müssen, gegen mehrere Partitionen vorzugehen? Möglicherweise verwenden Sie beispielsweise den falschen Partitionsschlüssel.

Verwandte Themen