如果我像这样搜索用户:
SELECT *
FROM userprofile
WHERE userid IN (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
执行计划显示 UserProfile 正在使用聚集索引查找
如果我更改 IN 子句以使用子查询:
SELECT *
FROM userprofile
WHERE userid IN (
SELECT DISTINCT senders.UserId
FROM messages m
JOIN UserMessages recipients ON recipients.MessageId = m.MessageId
JOIN UserMessages senders ON senders.MessageId = m.MessageId
WHERE recipients.TypeId = 2
AND recipients.UserId = 1
AND senders.UserId <> 1
AND senders.TypeId = 1
)
Run Code Online (Sandbox Code Playgroud)
执行计划显示子查询正在使用聚集索引查找,但 UserProfile 外部查询正在使用聚集索引扫描。
我该如何编写这个以便内部和外部查询都使用 Seeks?