次のテーブルがあります。
items (item_id (PRIMARY), item_name)
activity (activity_id (PRIMARY), item_id (INT), user_id (INT), lat (FLOAT), lng (FLOAT), created_at)
次のクエリを実行したいと思います。
SELECT
i.item_id,
i.item_name,
count(distint a.user_id) as total_count
FROM activity as a
INNER JOIN item as i
on a.item_id = i.item_id
WHERE (a.lat BETWEEN XXXXXXX
and XXXXXXX
and a.lng BETWEEN XXXXXXX
and XXXXXXX)
and created_at >= DATE_SUB(NOW(), INTERVAL 5 DAY)
GROUP by a.bid
ORDER BY RAND()
LIMIT 5
アクティビティに関するインデックスがあるにもかかわらず、これは 300 万から 500 万のレコード テーブルに対する負荷の高いクエリです。
item_index (item_id, lat, lng, created_at)
これは EXPLAIN では使用されず、デフォルトで「item_id」になります。私が求めているのは、このクエリを高速に実行するにはどのインデックスを追加する必要があるか、または最適化できるものがあるかということです。