I would like to query a table with a million records for customers named 'FooBar' that have records dated on 7-24-2016. The table has 10 days of data in it.
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');
The problem with the query above is that it takes awhile to run. I would like it to run faster.
The table is partitioned into 24 hr days. Could I focus the query on the table partitions? Would that make the query run faster?
select *
from partition-7-24-2016
where customer = 'FooBar';
With table partitioning, you can either choose to re-index the table data in its entirety or selectively. Doing so selectively will drastically reduce the time to execute this daily action. For some clients, I have seen between 50 and 75% improvement in performance.
Partitioning improves the performance of the delete old version shell script since all old version data is in a separate partition. By having all current version data in a separate partition, more current version data is available in database memory that results in efficient use of database buffer pools.
The correct syntax is select [columns] from [table] partition ([partition])
. So, in this usecase, you'd have something like this:
SELECT *
FROM mytable PARTITION (partition_7_24_2016)
WHERE customer = 'FooBar';
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With