5

tb_FirstName1 つのフィールドを持つテーブルがありますFirstName。テーブルには 1 億件の非ヌル レコードがあり、多数の繰り返しがあります。たとえば、John は 200 万回発生します。の個別の数はFirstName200 万を超えています。

標準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
    
4

5 に答える 5

11

TOP 1000で使用できるようですDISTINCT

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

凝縮された SQL Fiddle デモ

于 2013-03-29T11:40:09.217 に答える
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
于 2013-03-29T11:43:33.783 に答える
2

FirstName にインデックスが定義されていることを確認してください。

SELECT TOP 1000 FirstName
FROM (SELECT DISTINCT FirstName
FROM dbo.tb_DimUserAccount) N
ORDER BY FirstName
于 2013-03-29T11:39:28.197 に答える
2

FirstName フィールドで結果を並べ替えた後のデータが必要です。

インデックスが作成されていない場合は、フル テーブル スキャンが必要です。FirstName にインデックスが作成されている場合、Unique Index スキャンによって時間を改善できます。

于 2013-03-29T11:41:12.583 に答える
1

GROUP BY 句を含むオプション

SELECT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount
GROUP BY FirstName
ORDER BY FirstName
于 2013-03-29T11:53:22.077 に答える