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 功能可以帮助我优化此查询,尤其是日期比较部分?
任何意见或建议将不胜感激。先感谢您。
如果我是您并且必须重复执行此操作,我可能会添加计算列来为您提供所需的数据类型,并相应地为它们建立索引。
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 的原始查询即可使用新列。
归档时间: |
|
查看次数: |
1485 次 |
最近记录: |