在我的存储过程中,我需要其中一列的“唯一”值。我不确定我是否应该,如果我应该,我应该在桌面上应用什么类型的索引以获得更好的性能。不是非常具体,当我检索多列的不同值时会发生同样的情况。 该列是String(NVARCHAR)类型。
e.g。
从Table1中选择DISTINCT Column1;
OR
选择DISTINCT Column1,Column2,Column3 FROM Table1;
答案 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)