小编coh*_*hoz的帖子

使用限制和索引提高连接查询性能

我有一个跨两个大表的查询。第一个记录了一个位置的最新用户活动,第二个是一个带有位置自然主键的维度表。

这里的表大小大约为 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)

mysql performance index query-performance

3
推荐指数
1
解决办法
763
查看次数

标签 统计

index ×1

mysql ×1

performance ×1

query-performance ×1