0

これに似たクエリがあり、特定の顧客が時間枠内に行ったトランザクションの数を見つける必要があります。

select customer_id, count(transactions)
from transactions
where customer_id = 'FKJ90838485'
and purchase_date between '01-JAN-13' and '31-AUG-13'
group by customer_id

テーブル transactions は、customer_id ではなく、transaction_id という別のフィールドでインデックス化されています。Customer_ID は文字型で、transaction_id は数値です。

「accounting_month」フィールドもインデックス化されています。このフィールドには、トランザクションが発生した月が格納されるだけです。

トランザクション テーブルには、'01-JAN-13' と '31-AUG-13' からの時間枠で約 2000 万のレコードがあります。

上記のクエリを実行すると、戻ってくるまでに 40 分以上かかりました。アイデアやヒントはありますか?

4

3 に答える 3

0

transaction_idの代わりに範囲の を参照するため、これはより高速に実行される可能性がありpurchase_dateます。accounting_monthまた、インデックスが作成されていることも考慮します。

select customer_id, count(*)
from transactions
where customer_id = 'FKJ90838485'
and transaction_id between (select min(transaction_id)
                            from transactions
                           where accounting_month = '01-JAN-13' 
                           )  and
                           (select max(transaction_id)
                            from transactions
                           where accounting_month = '01-AUG-13' 
                           ) 
group by customer_id 

あなたも試すことができるかもしれません:

select customer_id, count(*)
from transactions
where customer_id = 'FKJ90838485'
and accounting_month between '01-JAN-13' and '01-AUG-13'
group by customer_id
于 2013-09-05T16:38:30.060 に答える