0

我有一个包含大量数据的表(比如 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 小时也可以。

4

1 回答 1

0

WITH names AS (select Name, COUNT(ID) OVER (PARTITION BY Name) AS CNT FROM T) 从 names.CNT > 10 的名称中选择 DISTINCT 名称

于 2016-04-21T13:58:33.603 回答