SQL Server - 群集/非群集索引 - 混淆最佳做法

时间:2014-02-04 13:40:57

标签: sql-server-2012 clustered-index non-clustered-index

我是一个开发人员,他正在使用现有的基于ASP.NET MVC / SQL Server 2012的应用程序。

应用程序的主要内容是捕获销售代表的日常工作。为此,我们有两个主要表DailyCallMasterDailyCallClientDetails。我们有客户等的主人,但问题的核心不是那个。

DailyCallMaster 列:

  1. DailyCallCode Varchar(30)(格式 - DUSER00121012014(D - 前缀,USER001(UserCode),21012014 - 数据输入日期)
  2. SalesRepUserCode varchar(30)
  3. ExpectedDateOfReport DateTime
  4. ActualDateOfReport DateTime
  5. StausOfCall varchar(10)(1表示完全通话,2表示半通话)
  6. DailyCallClientDetails 列:

    1. DailyCallCode varchar(30)(DailyCallMaster的概念refkey不是DB中的外键)
    2. ClientCode varchar(30)
    3. ClientListenStatus varchar(10)(A(活动客户端),I(被动客户端)
    4. TotalBusinessAssured decimal
    5. 有关客户的更多专栏......

      查询模式(英文):

      Select sum(BusinessAssured)对于遇到的每个客户说“2014年1月1日”到“2014年3月1日”,其ClientListenStatus为“活动”且呼叫状态为“已满”或“半”。

      问题

      1. 一方面我了解到PK(聚集索引也必须)狭窄且不断增加(比如顺序ID),但我的查询模式的其他方面建议让所有客户满足特定条件。因此,如果我必须强制执行聚簇索引以满足“不断增加”+窄,那么它必须是一个序列号,但我必须将我的数据页组合在一起,然后聚簇索引需要在“客户端代码”中
      2. 这些矛盾不是吗?我理解答案是“它取决于”这就是我提供查询模式的原因,但显然我对每个表都有C / R / U / D操作。如何在保持绩效考虑的同时在上述方面取得平衡?

        如果有帮助,典型的数据输入在标题表中每月几千个,在子表中几千个数千(每个代表每天最多10个客户,每月25天)至少)

        我是新手,我从Paul Randall / Kimberly Tripp那里读了许多文章,并且在我感到困惑之前发布了这个问题之前,他们对类似的问题做了很多非常有意义的答案(得到了SO的链接)。

        修改

        为marc_s评论添加查询:(可能与查询模式不完全匹配,但更接近,因为它有更多真实的列名和数据)

        SELECT 
            SUM(BusinessAssured) AS '[Business Assured]',
            DailyCallClientDetails.Client_Code
        FROM 
        DailyCallMaster dcm
        INNER JOIN 
            DailyCallClientDetails dcc ON dcm.DailyCallCode = dcc.DailyCallCode 
        WHERE                    
            dcc.ClientListenStatus IN ('A','I')
            AND dcc.Flag = 'F'
            AND dcm.SalesRepUserCode  IN ('X','Y','Z','A','B','C' etc) 
            --This IN clause is a list of SalesRepUserCode chosen in a tree view in UI
            AND dcm.ActualDateOfReport >='2013-08-01'
            AND dcm.ActualDateOfReport <='2013-08-30'   
            AND client_code IS NOT NULL
        GROUP BY 
            dcc.ClientCode 
        

        请帮忙

        干杯

0 个答案:

没有答案