我有以下表格:两个表连接索引优化
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
这是在3-5万人次的纪录沉重查询表,即使我有活动指数:
item_index (item_id, lat, lng, created_at)
这不会得到使用EXPLAIN,它只是默认为“ITEM_ID”。我想我要问的是 - 需要添加哪些索引才能使查询运行得更快,或者是否可以进行优化?
我不知道你可以改变BETWEEN到IN?另外你在哪里获得user_name? – gregavola
'between'到'in'的变化只是一种猜测。 'a.lng'好像是“语言”,似乎是离散的,但可能是别的。 'user_name'是我的错。 。 。我误读了'item_name'。 –