Ich möchte eine Tabelle mit einer Million Datensätze für Kunden namens "FooBar" abfragen, die Datensätze am 24.07.2016 datiert haben. Die Tabelle enthält 10 Tage Daten.Kann ich in Oracle SQL eine Partition einer Tabelle anstatt einer ganzen Tabelle abfragen, damit sie schneller ausgeführt wird?
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 es eine Weile dauert zu laufen. Ich möchte, dass es schneller läuft.
Die Tabelle ist in 24-Stunden-Tage unterteilt. Kann ich die Abfrage auf die Tabellenpartitionen konzentrieren? Würde das die Abfrage schneller ausführen?
select *
from partition-7-24-2016
where customer = 'FooBar';
Oracle sollte die richtigen Partitionen für die Abfrage auswählen. –
Was ist der Abfrageplan? Setzt Oracle die Partitionierung automatisch ab? Gibt es einen lokalen Index für "Kunden"? Wenn die Tabelle nur Daten für 10 Tage enthält, würde das Löschen der Partition immer noch einen vollständigen Scan einer Partition erfordern, die 10% der Daten in der Tabelle aufweist, die vermutlich sehr viel ist. Unter der Annahme, dass "Kunde" relativ selektiv ist, wäre ein Index für "Kunden" ein viel größerer Vorteil als die Partitionierung. –