具有巨大indexsize的aspnet_Users表

时间:2011-12-06 10:01:15

标签: sql-server asp.net-membership

我们有一个来自aspnet成员资格表的aspnet_Users表 索引大小近18 gb。

rows 251172
datasize 56472 KB
indexsize 17800536 KB

这只是标准的aspnet成员资格表,但是我们还有一个带有该表的外键的表(userid列)。

之前有人见过这个问题吗?

如何减少索引大小?

aspnet_Users表定义为

CREATE TABLE [dbo].[aspnet_Users](
    [ApplicationId] [uniqueidentifier] NOT NULL,
    [UserId] [uniqueidentifier] NOT NULL,
    [UserName] [nvarchar](256) NOT NULL,
    [LoweredUserName] [nvarchar](256) NOT NULL,
    [MobileAlias] [nvarchar](16) NULL,
    [IsAnonymous] [bit] NOT NULL,
    [LastActivityDate] [datetime] NOT NULL,
PRIMARY KEY NONCLUSTERED 
(
    [UserId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE UNIQUE CLUSTERED INDEX [aspnet_Users_Index] ON [dbo].[aspnet_Users] 
(
    [ApplicationId] ASC,
    [LoweredUserName] 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) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [aspnet_Users_Index2] ON [dbo].[aspnet_Users] 
(
    [ApplicationId] ASC,
    [LastActivityDate] 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) ON [PRIMARY]
GO

ALTER TABLE [dbo].[aspnet_Users] ADD  DEFAULT (newid()) FOR [UserId]
GO

ALTER TABLE [dbo].[aspnet_Users] ADD  DEFAULT (NULL) FOR [MobileAlias]
GO

ALTER TABLE [dbo].[aspnet_Users] ADD  DEFAULT ((0)) FOR [IsAnonymous]
GO

ALTER TABLE [dbo].[aspnet_Users]  WITH NOCHECK ADD FOREIGN KEY([ApplicationId])
REFERENCES [dbo].[aspnet_Applications] ([ApplicationId])
GO

1 个答案:

答案 0 :(得分:1)

这可以达到每行70k,但更多的是单个范围(8页,64k),这意味着大量的碎片。

你有没有对其进行索引维护?运行它,看看会发生什么

ALTER INDEX ALL ON aspnet_Users REBUILD

或者,该表是否已使用LOB(图片,XML等)列进行了扩展?或者有人添加了几十个索引?所以请添加实际使用中的表定义

编辑:删除LastActivityDate上的索引,或将其更改为smalldatetime以保持精确度,或者仅在更改时更新xx秒/分钟