我有一个跨两个大表的查询。第一个记录了一个位置的最新用户活动,第二个是一个带有位置自然主键的维度表。
这里的表大小大约为 1 亿行 inuser_location_rating
和 1000 万行 in dim_location
. 大多数用户有 < 1000 条记录user_location_rating
,对于这些用户来说,查询性能已经足够了。
对于有大量活动数据的用户,这个查询,即使是两个简单的选择,仍然会很慢。我想提高查询性能。这可以通过添加额外的索引来完成吗?作为替代方案,有没有一种方法可以利用索引使有限的查询(如下)比完整查询更有效?
SELECT d.create_time
FROM user_location_rating f
JOIN dim_location d using(location_id)
WHERE f.user_id=?
AND f.platform=?
AND d.category=?;
SELECT d.create_time
FROM user_location_rating f
JOIN dim_location d using(location_id)
WHERE f.user_id=?
AND f.platform=?
AND d.category=?
ORDER BY d.create_time DESC
LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)
EXPLAIN SELECT 对这些查询产生以下结果(例如,对于具有 999 个事件的用户)
+----+-------------+----------------------+--------+-------------------------------+-----------+---------+----------------------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | …
Run Code Online (Sandbox Code Playgroud)