2016年7月24日の日付のレコードを持つ 'FooBar'という名前の顧客について、100万レコードのテーブルを照会したいと思います。テーブルには10日間のデータがあります。
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';
正しい構文はselect [columns] from [table] partition ([partition])
です。したがって、このユースケースでは、次のようになります。
SELECT *
FROM mytable PARTITION (partition_7_24_2016)
WHERE customer = 'FooBar';
次のようにできます:
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');
これは、日付が該当するパーティション内の行のみを検索します-date '2016-07-24'
この例では。
括弧内にパーティション値を指定する必要があります。また、インデックスを作成した場合は、それがローカルであることを確認してください。そうしないと、テーブル自体から選択する場合ほどの改善は見られません。