背景。我正在使用 SQL Server。我在数据库中有两个表:
Vendors(Id, Name, Description)
Products(Id, VendorId, Name, Description)
列中的值使用表Id
中的前缀进行'ID_'
格式化Vendor
。
列中的值使用表VendorId
中的前缀进行'VE_'
格式化Products
。
例如 'VE_001245'
inProducts
指的是'ID_001245'
in Vendors
。
(请不要提出改变这个概念,不关心数据库方案,不建议添加外键。仅用于说明。)
问题:以下哪个查询在性能方面最好,为什么?
在内部使用
replace
函数select
:select v.* from Vendors v inner join ( select distinct replace(VendorId, 'VE_', 'ID_') as Id from Products ) list on v.Id = list.Id
在-语句中使用
replace
函数on
:select v.* from Vendors v inner join ( select distinct VendorId as Id from Products ) list on v.Id = replace(list.Id, 'VE_', 'ID_')
编辑。每个表中只有聚集索引(按Id
列)。每个表可以包含数百万行。