在 SP 内部,我需要找出Code
与第二个帐户的任何客户匹配的第一个帐户的一些客户的 ID。我写了以下有效的查询 -
SELECT DISTINCT cil.Id FROM ClientIdList AS cil
INNER JOIN Client AS c1
ON cil.Id = c1.Id
INNER JOIN Client AS c2
ON c1.Code = c2.Code
WHERE c2.AccountId = 2
ORDER BY cil.Id
这ClientIdList
是一个单列表类型的变量,它保存了第一个帐户中选定客户的 ID(在此之前我需要将此变量用于其他要求)。WHERE
如果我将条件放在子句中,我可以获得相同的正确输出JOIN
,如下所示 -
SELECT DISTINCT cil.Id FROM ClientIdList AS cil
INNER JOIN Client AS c1
ON cil.Id = c1.Id
INNER JOIN Client AS c2
ON c1.Code = c2.Code AND c2.AccountId = 2
ORDER BY cil.Id
考虑到每个帐户有 2000 个帐户和 10000 个客户(即Client
表中的 2000 x 10000 行),哪一个是合适的选择?
可以进一步优化查询以提高性能吗?
编辑:实际上条件是SP 的c2.AccountId = @accountId
参数@accountId
编辑 2:据我所知,使用 WHERE 子句版本,将与 Client 表的其余部分一起执行 JOIN,然后将根据 WHERE 条件过滤结果。但是对于更高版本的 JOIN 应该使用满足条件的较小行集来执行。我对吗?如果是这样,以后的版本不应该提供更好的性能吗?