У меня есть пара таблиц, которые проверяют, является ли «нормальное подозрение» (A) действительным с определенной даты. и «пробная подписка» (B) с датой отмены.
TABLE A
ValidFrom id
2022-09-24 1
2022-01-25 2
TABLE B
id cancellationDate
1 2023-07-16
2 2023-07-16
1 2023-06-05
2 2019-07-04
1 2016-10-01
1 2023-12-16
1 2017-10-28
пытаясь выяснить, есть ли подписка после пробного периода, я создал следующий запрос.
SELECT
Sales.B.CancellationDate
,Y.ValidFrom
FROM Sales.A AS Y
INNER JOIN
Sales.B ON Y.id = Sales.B.id
WHERE
Sales.B.CancellationDate > Y.ValidFrom
ORDER BY 1
, который вернет следующее:
CancellationDate ValidFrom
2023-06-05 2022-09-24
2023-07-16 2022-09-24
2023-07-16 2022-01-25
2023-12-16 2022-09-24
Мне было интересно, есть ли лучший способ для улучшения производительности следующего: (Учтите, что индексы есть)
Sales.B.CancellationDate > Y.ValidFrom
У меня такое ощущение, что DB Engine делает N x M сравнений, чтобы получить результат и выполнить BOOLEAN true.
EDIT:
Индексы / Таблица: * * тысяча двадцать одна
CLUSTERED INDEX [ClusteredIndex-20181107-194645] ON [Sales].[B]( [id] ASC)
CLUSTERED INDEX [ClusteredIndex-20181107-194645] ON [Sales].[A]( [id] ASC)
CREATE TABLE [Sales].[A](
[ValidFrom] [date] NULL,
[id] [tinyint] NULL
) ON [PRIMARY]
CREATE TABLE [Sales].[B](
[id] [tinyint] NULL,
[cancellationDate] [date] NULL
) ON [PRIMARY]