【发布时间】:2013-05-04 04:25:48
【问题描述】:
如果我这样搜索用户:
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?
【问题讨论】:
标签: sql sql-server performance tsql indexing