【问题标题】:Indexing strategy in sql server 2000 query with group by clause带有group by子句的sql server 2000查询中的索引策略
【发布时间】:2014-03-07 22:04:23
【问题描述】:

我有一个如下所示的查询,它在其中一列[Generated_red_ident]上有聚集索引。下面提到的查询的哪些列必须是非聚集索引?

我可以理解 Episode_Number 是非聚集索引的良好候选者。 列 methd 和 start_date1 怎么样?

另外,我是否也必须在 group by 子句中的所有这些列上创建非聚集索引?

请指教

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]

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2 indexing


    【解决方案1】:

    是的,理想情况下,您应该在查询中的所有列上创建索引。 您可以使用覆盖索引。 见Covered Index

    【讨论】:

      【解决方案2】:

      有两件事,NC-Index 的性能很大程度上取决于该索引中第一列的基数。因此,您应该考虑 [Episode_Number] 列的基数是多少。应使用具有高基数的列。此外,如果查询落入 75% 的使用场景,则在 SELECT 期间使用 DATEPART 函数使该值作为新列保留在表中。 最后一件事是,如果您将所有前 7 列都包含为 Cover Index Vs,您可以尝试看看性能提升多少。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-19
        • 1970-01-01
        • 2013-01-27
        相关资源
        最近更新 更多