7-24-2016に記録されたレコードを持つ「FooBar」という名前の顧客に対して、100万レコードのテーブルを照会したいと考えています。テーブルには10日間のデータがあります。Oracle SQLでは、テーブル全体の代わりにテーブルのパーティションにクエリを実行して、テーブルを高速に実行できますか?
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');
上記のクエリの問題は、実行するのに時間がかかります。私はそれをより速く走らせたいと思います。
テーブルは24時間に分割されています。テーブルパーティションにクエリを集中させることができますか?クエリをより速く実行させるでしょうか?
select *
from partition-7-24-2016
where customer = 'FooBar';
Oracleは、問合せに適切なパーティションを選択する必要があります。 –
クエリプランとは何ですか? Oracleは実際に自動的にパーティションのプルーニングを実行していますか? 'customer'にローカルインデックスがありますか?テーブルに10日しかないデータがある場合、パーティションプルーニングでは、表のデータの10%を持つパーティションをフルスキャンする必要があります。 'customer'が合理的に選択的であると仮定すると、' customer'のインデックスはパーティショニングよりもはるかに大きなメリットになります。 –