таблица aspnet_Users с огромным размером индекса - PullRequest
1 голос
/ 06 декабря 2011

У нас есть таблица aspnet_Users из таблицы членства aspnet, которая отображается с размер индекса почти 18 ГБ.

rows 251172
datasize 56472 KB
indexsize 17800536 KB

Это просто стандартная таблица членства в aspnet, но у нас есть другая таблица с внешним ключом этой таблицы (столбец идентификатора пользователя).

Кто-нибудь видел эту проблему раньше?

Как я могу уменьшить размер индекса?

таблица 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 Ответ

1 голос
/ 06 декабря 2011

Это работает при 70 КБ на строку, хотя это больше, чем единичный экстент (8 страниц, 64 КБ), что подразумевает массивную фрагментацию.

Вы когда-нибудь выполняли поддержку индекса для него?Запустите это и посмотрите, что произойдет

ALTER INDEX ALL ON aspnet_Users REBUILD

В качестве альтернативы, была ли таблица когда-либо расширена столбцом LOB (изображения, XML и т. Д.)?Или кто-то добавил десятки индексов?Поэтому, пожалуйста, добавьте фактическое определение используемой таблицы

Правка: удалите индекс LastActivityDate или измените его на smalldatetime, чтобы сохранить точность минут, или обновляйте его только в случае изменения более xx секунд / минут

...