I have a table with 193,569,270 rows in a SQL Server 2005 database. The table houses activities that are performed by users of our website. The table is defined as:
Name DataType ID int (identity) PK ActivityTime datetime PersonID int (should be an FK, but isn't) ActivityTypeID int (should be an FK, but isn't) Data1 varchar(50) Data2 varchar(50)
I have the following indexes:
CREATE NONCLUSTERED INDEX [_MS_Sys_3] ON [dbo].[tblPersonActivity] ([PersonID] ASC) INCLUDE ( [ID], [ActivityTime], [ActivityTypeID], [Data1], [Data2]) 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 [IX_Activity] ON [dbo].[tblPersonActivity] ([PersonID] ASC, [ActivityTypeID] ASC, ActivityTime] 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 = 90) ON [PRIMARY] GO CREATE NONCLUSTERED INDEX [IX_tblPersonActivity_PersonArchive] ON [dbo].[tblPersonActivity] ([ActivityTime] ASC) INCLUDE ([ID], [PersonID], [ActivityTypeID], [Data1], [Data2]) 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].[tblPersonActivity] ADD CONSTRAINT [PK_tblPersonActivity] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO
This is the query I've written:
declare @archiveDate datetime declare @curDate datetime declare @startDate datetime declare @curYear int declare @preYear int set @curDate = getdate() set @curYear = year(@curDate) set @preYear = @curYear - 1 set @archiveDate = @curDate set @startDate = cast(('1/1/' + cast(@preYear as varchar(4))) as datetime) declare @InactivePersons table (PersonID int not null PRIMARY KEY) insert into @InactiveBuyers select b.PersonID from HBM.dbo.tblPersons b with (INDEX(IX_tblPersons_InactiveDate_PersonID), nolock) where b.InactiveDate is not null and b.InactiveDate '1/1/1900' and b.InactiveDate '12/31/1899' and b.InactiveDate = @StartDate
The last time I ran the query it ran for over 1 day before I killed it. Have I missed something or is this just going to take that kind of time?
Thanks for any help you can provide.
Wayne E. Pfeffer