2

サーバー上の完全なテーブルスキャンに約 2 分 (150 mio データセット) かかる大きなテーブルがあります。

このテーブルには、1 年のそれぞれの日の販売トランザクションが保持されます。日付順にインデックスされています。

月に少なくとも 1 つのデータセットが存在する場合、各月の情報を取得する効率的な方法を探しています。

通常、私は次のようにします:

select month, count(*)
from transaction_table
group by month

これには時間がかかりすぎます。

クエリは、各月のすべてのデータセットをカウントする必要はありません。毎月少なくとも 1 つのデータセットが存在するかどうかを確認する必要があるだけです。

単一のクエリでこれを行うより効率的な方法はありますか?

4

4 に答える 4

0

個別の日付のリストを取得してから、そこから個別の月のリストを取得することをお勧めします。

SELECT DISTINCT MONTH(A.DATES) 
FROM (SELECT DISTINCT DATE AS DATES FROM TRANSACTION_TABLE) A

内部クエリは DATE のインデックスを使用し、それが datetime ではなく日付フィールドである限り、データで年間 365 の単一列行のみを返します。外側のクエリは、それを目的の月のリストに変換する短い作業を行います。

于 2013-07-09T05:43:58.060 に答える