数据量巨大,不能使用distinct
时间: 2024-02-21 07:16:42 浏览: 133
Oracle中SQL查询语句优化探析.pdf
如果数据量非常大,不适合使用 DISTINCT 关键字,可以尝试使用子查询来实现相同的效果。
以下是修改后的代码示例:
```sql
SELECT t2.city_name, COUNT(*) AS count
FROM (
SELECT t1.cuid
FROM (
SELECT cuid, MIN(event_time) AS min_event_time
FROM map_huiyan_short_stay
WHERE loc_x > 12993523 AND loc_x < 13012467
AND loc_y > 4773079 AND loc_y < 4789463
AND event_day = 20230605
GROUP BY cuid
) t1
JOIN map_huiyan_short_stay t3 ON t1.cuid = t3.cuid AND t1.min_event_time = t3.event_time
) t1
JOIN map_huiyan_long_stay_with_area t2 ON t1.cuid = t2.cuid
AND t2.event_day = 20230605
AND t2.event_type = 'home'
AND t2.event_os = 'android'
GROUP BY t2.city_name;
```
在这个修改后的代码中,我们使用了一个子查询来找到每个 `cuid` 的最早事件时间,然后将其与 `map_huiyan_short_stay` 表连接,以获取每个 `cuid` 的唯一记录。这样就避免了使用 DISTINCT 关键字。
请注意,这个查询使用了 MIN() 函数来找到最早的事件时间,并与子查询中的结果进行连接。根据你的数据模型和需求,你可能需要调整这些条件和子查询的逻辑。
希望这可以帮助到你!如果还有其他问题,请随时提问。
阅读全文