我们有如下表:哪种方法更适合这种情况?
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]
及以下唯一索引:
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万条记录并且在增长。我们还开展不需要优惠券代码的广告系列,因此我们不会插入这些记录。现在我们还需要开始跟踪这些广告系列以及其他目的。所以我们有2个选项:
- 我们更改CouponCode列不允许空值,并创建一个唯一的文件索引,使其不包含空值,并允许表增长得更大更快。
- 创建一个单独的表格,用于跟踪此特定用途的所有广告系列。
请记住,CampaignCustomer表经常用于兑换优惠券和插入新优惠券。底线是我们不希望我们的客户兑换优惠券,并一直等到他们放弃或其他流程失败。所以,从效率的角度来看,你认为哪种选择最好,为什么?
没有CouponCode的活动有多少(百分比)? – 2010-08-25 19:59:15
16.5%的广告系列没有优惠券代码。 – 2010-08-25 20:17:17
有了这个比例,我会去选项1.但是,而不是空值,我会使用虚拟代码,指示无优惠券记录。你可能会考虑分区表...... – 2010-08-25 20:22:05