TSQL:在SELECT WITH JOIN中使用REPLACE函数

s1ag04yj  于 2022-10-03  发布在  其他
关注(0)|答案(1)|浏览(128)

**后台。**我使用的是SQL Server。我的数据库中有两个表:

Vendors(Id, Name, Description)
Products(Id, VendorId, Name, Description)

Id列中的值格式化为Vendor表中的前缀e1d1e。

VendorId列中的值在Products表中使用前缀'VE_'进行格式化。

例如Products中的'VE_001245'Vendors中的'ID_001245'

(请不要建议改变这个概念,不要关心数据库方案,不要建议添加外键。所有这些都只是为了说明。)

问题:以下哪种查询的性能最好?为什么?

1.在select内部使用replace函数:

select v.* from Vendors v
inner join
(
    select distinct replace(VendorId, 'VE_', 'ID_') as Id
    from Products
) list
on v.Id = list.Id

1.在on-语句中使用replace函数:

select v.* from Vendors v
inner join
(
    select distinct VendorId as Id
    from Products
) list
on v.Id = replace(list.Id, 'VE_', 'ID_')

**编辑。**每个表中只有聚集索引(按Id列)。每个表可以包含数百万行。

jecbmhm3

jecbmhm31#

这两个查询在性能方面几乎相同。在第一个查询中,排序执行了两次,一次是在选择不同的记录时,另一次是在执行内部联接时,最后是一个合并联接,用于选择最终的结果集。而在第二个查询中,排序只进行一次,但执行的是Hash Join,这比Merge Join更昂贵。因此,当您在表上没有任何索引时,这两个查询的性能是相同的。

相关问题