通过标准sql从1亿条记录中选择1000个不同的名称

时间:2013-03-29 11:29:59

标签: sql sql-server standards ansi-sql

我有一个表tb_FirstName,其中包含一个字段FirstName。该表有1亿个非空记录,有很多重复,例如约翰发生了200万次。 FirstName的独特数量超过200万。

如何使用标准 sql尽快选择1000个不同的名称?

我目前正在使用以下内容,但这是

  • TSQL
  • 可能效率不高。

    SELECT x.FirstName
    FROM (
        SELECT  FirstName,
                rnk = RANK() OVER (ORDER BY Firstname)
        FROM    WHData.dbo.tb_DimUserAccount A
        GROUP BY FirstName
        ) x
    WHERE rnk <=1000
    

5 个答案:

答案 0 :(得分:8)

似乎您可以将TOP 1000DISTINCT一起使用:

SELECT DISINCT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount
ORDER BY FirstName

Condensed SQL Fiddle Demo

答案 1 :(得分:3)

试试这个

SELECT TOP 1000 FirstName FROM 
(SELECT 
ROW_NUMBER() OVER(PARTITION BY FirstName ORDER BY FirstName) NO,
 FirstName FROM WHData.dbo.tb_DimUserAccount )
  AS T1 WHERE no =1 

SELECT DISINCT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount ORDER BY FirstName

答案 2 :(得分:2)

确保在FirstName上定义了索引。

SELECT TOP 1000 FirstName
FROM (SELECT DISTINCT FirstName
FROM dbo.tb_DimUserAccount) N
ORDER BY FirstName

答案 3 :(得分:2)

在FirstName字段上对结果进行排序后,您需要数据。

如果未创建索引,则需要全表扫描。如果在FirstName上创建索引,则唯一索引扫描可以缩短时间。

答案 4 :(得分:1)

GROUP BY子句的选项

SELECT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount
GROUP BY FirstName
ORDER BY FirstName