我有一个包含大量数据的表(比如 1,000,000,000 行)。
表结构:
Id(Primary Key)
Name
...
我已经从表中省略了其他字段,因为我不能使用其中任何一个来限制我获取的数据。
这里的主键是Id
. 我没有任何索引,只有名称列。
我需要找到出现次数超过 n 的名称列表(例如 n = 10)。
我尝试了以下选项:
SELECT /+full(T)/ Name,COUNT(Id) AS CNT FROM T GROUP BY Name HAVING COUNT(ID) >10;
select distinct Name, COUNT(ID) OVER (PARTITION BY Name) AS CNT FROM T where CNT>10;
他们都占用了很大的临时空间。
任何其他优化查询以使用更少临时空间的建议。速度不是我最关心的问题。即使查询需要大约 2 小时也可以。