背景。我正在使用 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列)。每个表可以包含数百万行。