带有列的性能SQL Where子句

时间:2018-11-07 19:02:42

标签: performance tsql sql-server-2014 where

我有几个表,它们从某个日期开始看“正常订购”(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 

我感觉数据库引擎正在执行N x M比较,以便获得结果并实现BOOLEAN true。

编辑:

索引/表格:

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]

0 个答案:

没有答案