У меня есть две таблицы со следующим типом данных
Таблица 1 - [sta].[Stoerungen]
CREATE TABLE [sta].[Stoerungen](
[DWH_ID] [int] IDENTITY(1,1) NOT NULL,
[SPS_Bereich] [nvarchar](30) NULL,
[ID] [int] NULL,
[DateTime] [datetime] NULL,
[Classname] [nvarchar](255) NULL,
[txtName] [nvarchar](255) NULL,
[txtCame] [nvarchar](255) NULL,
[TimeDiff] [int] NULL
) ON [PRIMARY]
Таблица 2 - [dbo].[scheduled_events_ISTProduction]
CREATE TABLE [dbo].[scheduled_events_ISTProduction](
[event_id] [varchar](50) NOT NULL,
[item_id] [int] NOT NULL,
[start_date] [datetime] NULL,
[end_date] [datetime] NULL,
[label] [varchar](45) NULL,
[foreground] [varchar](45) NULL,
[background] [varchar](45) NULL,
[lead_time] [int] NULL,
[lead_color] [varchar](45) NULL,
[pct_done] [int] NULL,
[createdby] [varchar](50) NULL,
[createdon] [datetime] NULL,
[typ] [int] NULL,
[timediff] [int] NULL
) ON [PRIMARY]
Я использую следующий запрос, чтобы получить 100 первых строк, что занимает около 11 секунд.
select TOP 100 T.DWH_ID,T.date_time, T.TimeDiff, T.[End Date], T.SPS_Bereich, T.txtName from (
SELECT sto.[DWH_ID]
,sto.[SPS_Bereich]
,FORMAT(sto.[DateTime], 'dd-MM-yyyy HH:mm') as date_time
,sto.[txtName]
,sto.[TimeDiff]
, DATEADD(second,sto.[TimeDiff],FORMAT(sto.[DateTime], 'dd-MM-yyyy HH:mm'))as [End Date]
FROM [Stoerdaten].[sta].[Stoerungen] sto where sto.Classname='Alarm' and sto.TimeDiff>60 ) as T
join [IgnitionServer].[dbo].[scheduled_events_ISTProduction] cal on
((T.date_time between cal.start_date and cal.end_date) and T.[End Date] between cal.start_date and cal.end_date) where cal.typ=1 order by [DWH_ID] desc
Как я могу оптимизировать этот запрос, чтобы он работал быстрее, и какой индекс мне следует создать для лучшей производительности.
в настоящее время существует только один индекс для DWH_ID
как UNIQUE CLUSTERED INDEX