此查询大约需要3分钟,并返回7279行:
SELECT identity(int,1,1) as id, c.client_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;
'client_code'字段的类型是VARCHAR(6)。
是否有可能以某种方式优化此查询?
答案 0 :(得分:1)
将记录插入临时表中,而不使用Order by Clause ,然后使用c.client_code对它们进行排序。希望它能帮到你。
创建表#temp ( 你的专栏...... )
和在此表中插入记录 不使用按条款排序。现在使用按条目排序
运行选择答案 1 :(得分:0)
您是否为表格设置了索引?外键列以及Magazin.status的索引可能有所帮助。
答案 2 :(得分:0)
答案 3 :(得分:0)
如果在where子句中引用了表,则总是先尝试列出表 - 它会尽可能早地切断行组合。在这种情况下,Magazin
表在where子句中有一些谓词,但在表列表中列出。这意味着所有其他联接必须在之前进行可以过滤Magazin行 - 可能是数百万的额外行。
试试这个(让我们知道它是怎么回事):
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;
这种优化可以大大提高查询性能。