如果我像这样搜索用户:
SELECT *
FROM userprofile
WHERE userid IN (1, 2, 3)
执行计划显示 UserProfile 正在使用 Clustered Index Seek
如果我将 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
)
执行计划显示子查询正在使用聚集索引搜索,但 UserProfile 外部查询正在使用聚集索引扫描。
我怎样才能写这个,以便内部和外部查询都使用 Seeks?