“活动”是一个位字段。如果其中一个具有此client_id的行具有值true
,则需要将其设置为trueSELECT c.client_id, u.branch_id, a.account_id, activity
FROM Clients c INNER JOIN
accounts a ON c.id=a.client_id INNER JOIN uso u ON a.uso_id = u.uso_id,
(SELECT MAX(CONVERT(int,accounts.activity)) as activity, client_id
FROM accounts GROUP BY client_id) activ
WHERE activ.client_id = c.id
此查询执行约2分钟。请帮我优化一下。
答案 0 :(得分:6)
似乎activity
字段是BIT
,您无法对其进行MIN
或MAX
。
而不是使用TOP
:
SELECT c.client_id, u.branch_id, a.account_id,
(
SELECT TOP 1 activity
FROM accounts ai
WHERE ai.client_id = c.id
ORDER BY
activity DESC
)
FROM clients c
JOIN accounts a
ON c.id = a.client_id
JOIN uso u
ON a.uso_id = u.uso_id
在accounts (client_id, activity)
上创建一个索引,以便快速工作。
您可能想阅读这篇文章:
答案 1 :(得分:-2)
加入很贵。而不是加入,使用内存缓存并发出单独的请求。