Perfomance SQL Where Clause со столбцом - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть пара таблиц, которые проверяют, является ли «нормальное подозрение» (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]
...