Sar*_*nan 8 sql-server stored-procedures
除了在下面给定的 SP 中使用 IN 子句之外,还有没有更好的方法来编写 SQL。当我使用这个 IN 子句时,由于 User 和 Member 表中涉及大量或记录,我的性能下降。
CREATE PROCEDURE [dbo].[sp_MemberIdsFromUserIds] @dtUserIds UNIQUETABLE readonly
AS
BEGIN
SELECT userID,
Memberid
FROM Member
INNER JOIN USER
ON UserMemberID = MemberiD
WHERE userID IN (SELECT UniqueId
FROM @dtUserIds)
END
Run Code Online (Sandbox Code Playgroud)
请提出替代方案,因为我对写作 SP 没有完整的了解
Whereexists通常比IN快
SELECT userID,
Memberid
FROM Member
INNER JOIN [USER]
ON UserMemberID = MemberiD
WHERE EXISTS (SELECT *
FROM @dtUserIds a where [user].userId = a.Uniqueid)
Run Code Online (Sandbox Code Playgroud)
尝试这个选项,SQL Server 有一半的机会会表现不同......
CREATE PROCEDURE [dbo].[sp_MemberIdsFromUserIds] @dtUserIds UNIQUETABLE readonly
AS
BEGIN
SELECT userID,
Memberid
FROM Member
INNER JOIN USER
ON UserMemberID = MemberiD
INNER JOIN @dtUserIds
ON UniqueId = userID
END
Run Code Online (Sandbox Code Playgroud)
如果这没有帮助,请发布所有 3 个表的结构
(user、memeber 和 @dtUserIds) - 包括索引和键。
祝你好运 :)