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