我們有如下表:哪種方法更適合這種情況?
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