开发者

How to optimize the query? t-sql

This query works about 3 minutes and returns 7279 rows:

SELECT identity(int,1,1) as id, c.cl开发者_StackOverflow社区ient_code, a.account_num, 
        c.client_short_name, u.uso, us.fio, null as new, null as txt 
INTO #ttable
FROM accounts a INNER JOIN Clients c ON 
    c.id = a.client_id INNER JOIN Uso u ON c.uso_id = u.uso_id INNER JOIN 
    Magazin m ON a.account_id = m.account_id LEFT JOIN Users us ON 
    m.user_id = us.user_id
WHERE m.status_id IN ('1','5','9') AND m.account_new_num is null 
    AND u.branch_id = @branch_id
ORDER BY c.client_code;

The type of 'client_code' field is VARCHAR(6).

Is it possible to somehow optimize this query?


Insert the records in the Temporary table without using Order by Clause and then Sort them using the c.client_code. Hope it should help you.

Create table #temp ( your columns... )

and Insert the records in this table Without Using the Order by Clause. Now run the select with Order by Clause


Do you have indexes set up for your tables? An index on foreign key columns as well as Magazin.status might help.


  1. Make sure there is an index on every field used in the JOINs and in the WHERE clause
  2. If one or the tables you select from are actually views, the problem may be in the performance of these views.


Always try to list tables earlier if they are referenced in the where clause - it cuts off row combinations as early as possible. In this case, the Magazin table has some predicates in the where clause, but is listed way down in the tables list. This means that all the other joins have to be made before the Magazin rows can be filtered - possibly millions of extra rows.

Try this (and let us know how it went):

SELECT ... 
INTO #ttable
FROM accounts a
INNER JOIN Magazin m ON a.account_id = m.account_id
INNER JOIN Clients c ON c.id = a.client_id
INNER JOIN Uso u ON c.uso_id = u.uso_id
LEFT JOIN Users us ON m.user_id = us.user_id
WHERE m.status_id IN ('1','5','9')
AND m.account_new_num is null 
AND u.branch_id = @branch_id
ORDER BY c.client_code; 

This kind of optimization can greatly improve query performance.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜