0

2,000 万のレコード テーブルに対する単純なクエリがあり、次のクエリの select ステートメントを改善するインデックスが必要です。

 SELECT count(item_id), count(distinct user_id)
 FROM activity
 INNER JOIN item on item.item_id = activity.item_id
 WHERE item.item_id = 3839 and activity.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)

私はインデックスを持っています:

activity - activity_id (PRIMARY), item_id, created_at - All Single Index
item - item_id (PRIMARY)

大量のコンテンツ (600k など) を持つアイテムでは、クエリの実行に 4 ~ 5 秒かかります。

何かアドバイス?

4

1 に答える 1

0

toFOREIGN KEYからの制約がある場合(およびそれが table にあると仮定)、クエリは次のようになります。activityitemuser_idactivity

SELECT COUNT(*), COUNT(DISTINCT user_id)
FROM activity
WHERE item_id = 3839 
  AND created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY) ;

これは、1 つのテーブルまたは 1 つのインデックスのみからデータを取得する必要があるため、より効率的です。のインデックス(item_id, created_at, user_id)が役立ちます。

于 2013-02-07T23:39:47.970 に答える