我有下表,并且想知道最佳索引方法。表格不会加入任何其他表格,但如果以后需要提供外键,则表格已包括在内。表将是单个报告的汇总表,目前我能想到的唯一聚集索引是复合的,并且包含很多列,因为这是获得唯一值的唯一方法,是否值得使用身份密钥并使用它作为我的索引?我还在各种奇异列上创建了一些非聚集索引,这些列将在我的报告中用作参数。
任何建议都会非常受欢迎,因为我的索引知识并不太棒,你能不能提供解释。
table [AccountingPeriod] [char](6) NOT NULL, [reportPeriod] [char](6) NOT NULL, [NewRenewal] [varchar](10) NOT NULL, [MovementTypeGroup] [varchar](80) NOT NULL, [Year] [varchar](4) NULL, [Quarter] [varchar](1) NOT NULL, [Month] [varchar](2) NULL, [BranchId] [smallint] NOT NULL, [BranchKey] [int] NOT NULL, [BranchDescription] [varchar](50) NOT NULL, [ProductId] [int] NOT NULL, [ProductKey] [int] NOT NULL, [ProductDescription] [varchar](50) NOT NULL, [UgId] [smallint] NOT NULL, [UgKey] [int] NOT NULL, [UnderwritingGroup] [varchar](30) NOT NULL, [ActualGBP] [numeric](38, 6) NULL, [ActualEUR] [numeric](38, 6) NULL, [ActualUSD] [numeric](38, 6) NULL, [PlanGBP] [money] NOT NULL, [PlanEUR] [float] NOT NULL, [PlanUSD] [float] NOT NULL, [PriorGBP] [int] NOT NULL, [PriorEUR] [int] NOT NULL, [PriorUSD] [int] NOT NULL
索引
FlashreportPeriod,NewRenewal,BranchDescription,ProductDescription,UnderwritingGroup,DWAccountingPeriod,MovementTypeGroup
答案 0 :(得分:0)
最佳指数策略是将指数设计延迟到需要时为止。对于外键,你已经明确地将它们排除在外。索引会花费您在插入和更新时的时间,并节省您在查询时的时间。你打算做什么样的查询?每个查询的相对频率和相对紧急程度是多少?这将指导您使用正确的索引来支持简单查询。
说了这么多,你有理由为这个表声明一个主键。没有主键的表容易受到重复的影响,并且重复在逻辑层面上是一个真正的混乱(参见第一范式)。如果您确实声明了主键,那么任何体面的DBMS都会为您构建一个索引,该索引将与主键相同的列编目。
至少需要该索引来检测插入时的重复项。它也可能有助于查询。听起来你的PK将包括AccountingPeriod。这将使索引对涉及AccountingPeriod的查询最有用。