it-swarm.com.de

Kann ich in Oracle SQL eine Partition einer Tabelle anstelle einer ganzen Tabelle abfragen, um sie schneller auszuführen?

Ich möchte eine Tabelle mit einer Million Datensätzen für Kunden mit dem Namen 'FooBar' abfragen, deren Datensätze vom 24.07.2016 datiert wurden. Die Tabelle enthält 10 Tage Daten.

select * 
from table
where customer = 'FooBar'
and insert_date between to_date('2016-07-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and to_date('2016-07-24 23:59:59', 'YYYY-MM-DD HH24:MI:SS');

Das Problem mit der obigen Abfrage ist, dass die Ausführung eine Weile dauert. Ich möchte, dass es schneller läuft.

Die Tabelle ist in 24 Stunden-Tage unterteilt. Könnte ich die Abfrage auf die Tabellenpartitionen fokussieren? Würde die Abfrage dadurch schneller laufen? 

select *
from partition-7-24-2016
where customer = 'FooBar'; 
6
Cale Sweeney

Die korrekte Syntax lautet select [columns] from [table] partition ([partition]). In diesem Fall hätten Sie also so etwas:

SELECT *
FROM   mytable PARTITION (partition_7_24_2016)
WHERE  customer = 'FooBar'; 
12
Mureinik

Sie können es so machen:

select * from table PARTITION FOR (date '2016-07-24') where customer = 'FooBar'
and insert_date between to_date('2016-07-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and to_date('2016-07-24 23:59:59', 'YYYY-MM-DD HH24:MI:SS');

Dies sucht nur nach Zeilen in der Partition, in denen Ihr Datum in diesem Beispiel in - date '2016-07-24' fällt.

Sie müssen sicherstellen, dass Sie den Partitionswert in den Klammern angeben. Wenn Sie einen Index erstellt haben, stellen Sie sicher, dass er lokal ist. Andernfalls werden Sie durch die Auswahl aus der Tabelle selbst keine wesentlichen Verbesserungen feststellen.

1
Palcente