如何优化TSQL查询?

Dmi*_*ryB 5 sql t-sql sql-server

"活动"是一个有点领域.如果其中一个具有此client_id的行的值为true,则需要将其设置为true

SELECT 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
Run Code Online (Sandbox Code Playgroud)

此查询执行大约2分钟.请帮我优化一下.

Qua*_*noi 6

似乎activity字段是一个BIT,你不能做MINMAX在它上面.

而不是这个,使用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
Run Code Online (Sandbox Code Playgroud)

accounts (client_id, activity)为此创建索引以快速工作.

您可能想阅读这篇文章: