DISTINCT值

时间:2017-07-05 05:56:39

标签: sql sql-server sql-server-2012

在我的存储过程中,我需要其中一列的“唯一”值。我不确定我是否应该,如果我应该,我应该在桌面上应用什么类型的索引以获得更好的性能。不是非常具体,当我检索多列的不同值时会发生同样的情况。 该列是String(NVARCHAR)类型。

e.g。

  

从Table1中选择DISTINCT Column1;

OR

  

选择DISTINCT Column1,Column2,Column3 FROM Table1;

2 个答案:

答案 0 :(得分:0)

这些特定列的索引可以稍微提高性能,但仅仅因为它需要SQL Server扫描较少的数据(只是这些特定的列,没有别的)。除此之外 - SCAN将永远完成。如果您需要该表中的不同值,则可以选择创建索引视图。

CREATE VIEW Test
WITH SCHEMABINDING
AS
SELECT Column1, COUNT_BIG(*) AS UselessColumn
FROM Table1
GROUP BY Column1;
GO
CREATE UNIQUE CLUSTERED INDEX PK_Test ON Test (Column1);
GO

然后你可以这样查询:

SELECT *
FROM Test WITH (NOEXPAND);

NOEXPAND是SQL Server不在视图中展开查询并将其视为表格所需的提示。注意:仅适用于非企业版的SQL Server。

答案 1 :(得分:0)

我最近遇到了同样的问题,发现可以使用Columnstore索引来解决:

    CREATE NONCLUSTERED COLUMNSTORE INDEX [CI_TABLE1_Column1] ON [TABLE1]
    ([Column1])
    WITH (DROP_EXISTING = OFF, COMPRESSION_DELAY = 0)
相关问题