Ниже приведен скрипт создания таблицы: -
CREATE TABLE [dbo].[PatientCharts](
[PatientChartId] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[FacilityId] [uniqueidentifier] NOT NULL,
[VisitNumber] [varchar](200) NOT NULL,
[MRNNumber] [varchar](100) NULL,
[TimeIn] [time](7) NULL,
[TimeOut] [time](7) NULL,
[DateOfService] [date] NULL,
[DateOut] [date] NULL),
У меня есть один кластеризованный индекс для PatientChartId и два некластеризованных индекса для VisitNumber и MRNNumber. В этой таблице миллионы записей.
Следующий запрос выполняет сканирование кластерного индекса: -
SELECT *
FROM dbo.PatientCharts
INNER JOIN ( SELECT FacilityID
FROM Facilities
WHERE RemoteClientDB IN (
SELECT SiteID
FROM RemoteClient WITH ( NOLOCK )
WHERE Code = 'IN-ESXI-EDISC14'
)
) AS Filter ON dbo.PatientCharts.FacilityId = Filter.FacilityID
Это сканирование кластерного индекса занимает много времени в производстве из-за объема данных.
План выполнения: -

Я даже пытался добавить некластеризованный индекс на FacilityID и включить PatientChartID, но тот же план выполнения.
Я делаю DBCC FREEPROCCACHE каждый раз, чтобы указывать серверу sql каждый раз использовать новый план.
Есть ли что-нибудь еще, что я должен сделать, чтобы предотвратить кластеризованное сканирование индекса?