我有一个如下所示的查询,它在其中一列[Generated_red_ident]上有聚集索引。下面提到的查询的哪些列必须是非聚集索引?
我可以理解Episode_Number是非聚集索引的一个很好的候选者。 如何列dbd和start_date1?
另外,我是否还必须在group by子句中的所有列上创建非聚集索引?
请sugest
SELECT [ID],
[Number],
[Age],
[Start_Date],
[Pr],
[Mthd],
[Identifier],
CASE
WHEN [methd] IN ( 21, 22, 23, 24,28) THEN 'er'
END AS 'ner',
CASE
WHEN Datepart(dw, [Start_Date1]) in (1,7) THEN 'Weekend'
END AS 'weekday'
FROM [PPL_Data]
WHERE [Episode_Number] = 1
GROUP BY [ID],
[Number],
[Age],
[Start_Date],
[Pr],
[Mthd],
[Identifier]
答案 0 :(得分:1)
是的,理想情况下,您应该在查询中的所有列上创建索引。 您可以使用覆盖索引。 见Covered Index
答案 1 :(得分:0)
两件事,NC-Index的表现很大程度上取决于该指数第一列的基数。所以你应该想一下列[Episode_Number]的基数是什么。应使用具有高基数的列。另外,在SELECT期间使用DATEPART函数,如果查询落入75%的使用场景,则该值将作为新列保留在表中。 最后一件事是,如果将前7列作为Cover Index Vs包含在内,只有少数几个列,你可以试着看看性能有多大提升。