Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优化查询?t-sql_Sql_Sql Server 2005_Tsql - Fatal编程技术网

如何优化查询?t-sql

如何优化查询?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

此查询工作约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;
“客户端代码”字段的类型为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表达式中的所有列?