首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于这种情况,哪种方法更好?

对于这种情况,哪种方法更好?
EN

Stack Overflow用户
提问于 2010-08-25 19:54:01
回答 2查看 80关注 0票数 1

我们有下表:

代码语言:javascript
复制
CREATE TABLE [dbo].[CampaignCustomer](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [CampaignID] [int] NOT NULL,
    [CustomerID] [int] NULL,
    [CouponCode] [nvarchar](20) NOT NULL,
    [CreatedDate] [datetime] NOT NULL,
    [ModifiedDate] [datetime] NULL,
    [Active] [bit] NOT NULL,
 CONSTRAINT [PK_CampaignCustomer] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

以及以下独特的指数:

代码语言:javascript
复制
CREATE UNIQUE NONCLUSTERED INDEX [IX_CampaignCustomer_CouponCode] ON [dbo].[CampaignCustomer] 
(
    [CouponCode] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 20) ON [PRIMARY]
GO

我们使用CouponCode和其他外键进行相当恒定的查询(为了简单起见,上面没有显示)。CampaignCustomer表有将近400万条记录,而且还在不断增长。我们也做运动,不需要优惠券代码,因此我们不插入这些记录。现在,我们还需要开始跟踪这些运动,以及另一个目的。所以我们有两个选择:

  1. 我们更改了CouponCode列t,允许空,并创建一个唯一的文件索引,以不包含空,并允许表变得更大和更快。
  2. 创建一个单独的表,用于跟踪用于此特定目的的所有活动。

请记住,CampaignCustomer表经常用于替换优惠券和插入新的优惠券。底线是,我们不希望我们的客户赎回一张优惠券,一直等到他们放弃或者其他程序失败。那么,从效率的角度来看,你认为哪种选择最好,为什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-25 20:02:19

我会选择过滤索引..。您正在存储相同的数据,因此将其保存在同一个表中。

当您可能不需要表并增加复杂性时,拆分表就是重构。

你对400万行有问题吗?特别是在这么窄的桌子上

票数 4
EN

Stack Overflow用户

发布于 2010-08-25 20:08:54

  1. I反对复制表,因为只有一个列允许couponcode为空,这意味着某人可能会意外地创建一个记录,当它应该是一个有效的耦合代码

时,该值为空

我会创建一个表示为非优惠券的couponcode,而不是求助于指示列"isCoupon“或"isNonCouponCampaign",并使用过滤后的索引来忽略"nocoupon”值。

这就引出了我的下一个观点--我没有看到外键引用,但这将是知道存在哪些优惠券以及哪些优惠券被实际使用的关键。现有表中的某些列可以移动到父耦合代码表.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3569709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档