如果我像这样搜索用户:
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?
我有一个如下结果集:
MinID MaxID ColumnName
---------- ------- -------------------
167 34458 AccountManager
174 174 ClientDeliveryDate
184 184 LocalContactEmail
192 34459 ProjectDeveloper
194 194 ServiceType
Run Code Online (Sandbox Code Playgroud)
我想要一个结果集如:
AccountManager ClientDeliveryDate LocalContactEmail ProjectDeveloper ServiceType
-------------- ------------------ ----------------- ---------------- -----------
167 174 184 192 194
34458 174 184 34459 194
Run Code Online (Sandbox Code Playgroud)