Отфильтрованные индексы допускают только предикаты AND
и IN
, поэтому ваша проблема в предложении WHERE
- вы не можете использовать OR
. Вы можете обойти это, создав два индекса:
CREATE NONCLUSTERED INDEX [HE_MissingIndex] ON [dbo].[HardwareEvents]
(
[PlaceId] ASC,
[EventId] ASC,
[UserTokenType] ASC
)
INCLUDE ( [Id],
[EventTime],
[UserToken],
[Username],
[UserId],
[VisitorId],
[UserLastname])
WHERE [EventId] = 16 and [UserTokenType] = 5
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = ON, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [HE_MissingIndex_2] ON [dbo].[HardwareEvents]
(
[PlaceId] ASC,
[EventId] ASC,
[UserTokenType] ASC
)
INCLUDE ( [Id],
[EventTime],
[UserToken],
[Username],
[UserId],
[VisitorId],
[UserLastname])
WHERE [EventId] = 58
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = ON, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]