如何优化查询?t-sql
此查询工作约3分钟,返回7279行:如何优化查询?t-sql,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,此查询工作约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
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;
“客户端代码”字段的类型为VARCHAR6
是否可以以某种方式优化此查询?是否为表设置了索引?外键列上的索引以及Magazin.status可能会有所帮助 确保在联接和WHERE子句中使用的每个字段上都有索引 如果您从中选择的一个或多个表实际上是视图,则问题可能在于这些视图的性能。
如果where子句中引用了表,请始终尝试更早地列出它们-它会尽早切断行组合。在本例中,Magazin表在where子句中有一些谓词,但在tables列表中列得很低。这意味着在过滤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;
这种优化可以极大地提高查询性能。在临时表中插入记录,而不使用ORDERBY子句,然后使用c.client\U代码对它们进行排序。希望它能帮助你
创建临时表
你的专栏。。。
并在不使用Order by子句的情况下在此表中插入记录。现在运行SELECTWITHORDERBY子句Yes,我认为OP可能需要Where子句中列的索引。是吗?请您在没有order by子句的情况下进行检查。@SQL:需要2秒钟时间检查我的答案,以便与其他人一起进行更新。这肯定对你有帮助对不起,我认为这没有帮助。OP应首先在不带Order by子句的临时表中插入记录,然后单独运行临时表的select语句。感谢帮助-它可以工作2秒。那么索引呢?是否应该制作它们对于联接和WHERE表达式中的所有列?