在 DATETIME 列上连接表时优化 SQL Server 查询

Faj*_*iya 3 join sql-server datetime date

我正在使用 SQL Server,我有两个表,table1并且table2. 两个表都有一个DATETIME表示为 的列dt。我不仅需要根据某些条件连接这些表,还要确保匹配的行具有相同的日期(此处不考虑时间)dt

这是我当前使用的查询:

select *
From table1 a inner join table2 b
    on a.id = b.a_id
    and convert(date, a.dt) = convert(date, b.dt)
Run Code Online (Sandbox Code Playgroud)

该查询可以获取我需要的结果,但我担心它的性能,尤其是当表大小增加时。

我想知道是否有更高效的方法可以达到相同的结果?是否有技术或 SQL Server 功能可以帮助我优化此查询,尤其是日期比较部分?

任何意见或建议将不胜感激。先感谢您。

Eri*_*ing 7

计算

如果我是您并且必须重复执行此操作,我可能会添加计算列来为您提供所需的数据类型,并相应地为它们建立索引。

ALTER TABLE table1 ADD dt_c AS CONVERT(date, dt);
ALTER TABLE table2 ADD dt_c AS CONVERT(date, dt);
Run Code Online (Sandbox Code Playgroud)

当然,在对列进行索引以支持联接之前,这本身并不会给您带来任何真正的好处。

这种方法的优点在于,将计算列添加为非持久化是一种快速、非阻塞的操作,对数据库的写入几乎为零。您可以将其推迟到添加索引时(无论如何您都需要)。

通过查询优化的表达式匹配部分,您甚至不需要更改 SQL Server 的原始查询即可使用新列。