如何优化SQL查询?

时间:2011-07-25 13:33:27

标签: sql sql-server tsql

“活动”是一个位字段。如果其中一个具有此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

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

2 个答案:

答案 0 :(得分: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

accounts (client_id, activity)上创建一个索引,以便快速工作。

您可能想阅读这篇文章:

答案 1 :(得分:-2)

加入很贵。而不是加入,使用内存缓存并发出单独的请求。