Sql server 使用时Excel中的SQL查询需要更长的时间?若要获取大于查询中指定值的单元格值,请执行以下操作:

Sql server 使用时Excel中的SQL查询需要更长的时间?若要获取大于查询中指定值的单元格值,请执行以下操作:,sql-server,performance,excel,parameters,Sql Server,Performance,Excel,Parameters,我编写了一个SQL Server数据库的Excel查询,以显示复杂视图中的结果。该视图对少于10K条记录的多个表使用联接,返回大约620行,执行时间为1-4秒。总是。添加WHERE子句以将查找的ID限制为特定值,它会根据查找的ID在1到100行之间进行选择,并且总是在不到1秒的时间内执行 但是,修改WHERE子句以使用ID=?,并将其指向单元格。现在,如果选择的行数少于30行,则执行查询需要5-30秒;如果选择了30-50行,则需要2-4分钟;如果选择了70-100行,则需要10-15分钟;如果

我编写了一个SQL Server数据库的Excel查询,以显示复杂视图中的结果。该视图对少于10K条记录的多个表使用联接,返回大约620行,执行时间为1-4秒。总是。添加WHERE子句以将查找的ID限制为特定值,它会根据查找的ID在1到100行之间进行选择,并且总是在不到1秒的时间内执行

但是,修改WHERE子句以使用ID=?,并将其指向单元格。现在,如果选择的行数少于30行,则执行查询需要5-30秒;如果选择了30-50行,则需要2-4分钟;如果选择了70-100行,则需要10-15分钟;如果选择的行数超过30行,则需要超时。这些时间是一致的


如果使用Excel查询请求单元格,为什么Excel查询需要更长的时间?参数而不是给定值?为什么小查询完成得快,大一点的查询需要更长的时间,而“大”查询需要如此长的时间?

这可能是一个“参数嗅探”问题。尝试包括以下行:

OPTION (RECOMPILE)
在SQL查询的末尾


这里有一篇文章解释了什么是参数嗅探:

您是否使用探查器查看在每种情况下发送到SQL Server的查询有多大的不同?了解查询后,您可以查看计划。也许这是一个“医生,当我做x时它会痛?”的例子,医生回答,“不要做x:-)查询是“从id=631的IDView中选择*”和“从id=631的IDView中选择*”。输入第二个单元格后,Excel(2007)要求输入一个单元格。我理解Excel向您显示的内容,但它可能会将第二个单元格更改为字符串比较,从而导致隐式转换,或者更糟。因此,查看探查器从SQL Server端看到的内容将提供比您在Excel中看到的更多的信息。请注意,Excel可能与性能关系不大,SQL Server端肯定有一些不同之处。好的,谢谢。如何在SQL Server端运行探查器?如何到达“SQL Server端”@shipr:请使用查询中引用的表和视图定义更新帖子。查找列名、数据类型、主键/外键约束等听起来很合理。如果不是这样,我不明白为什么要花9000倍的时间。。。