【发布时间】:2021-12-05 17:46:17
【问题描述】:
在我的应用程序中,我使用类似的查询
SELECT column1, column2
FROM table
WHERE myDate >= date1 AND myDate <= date2
我的应用程序崩溃并返回超时异常。我复制查询并在 SSMS 中运行它。结果窗格显示约 40 秒的执行时间。然后我删除查询的WHERE 部分并运行。这一次,返回的行立即出现在结果表中,尽管查询继续打印更多行(表中有 500 万行)。
我的问题是:WHERE 子句如何影响查询性能?
注意:我不会更改应用程序中的CommandTimeOut 属性。默认离开。
【问题讨论】:
-
您很可能需要在该列上建立索引,否则 MSSQL 必须搜索数据库中的每条记录才能找到相关数据。您可以检查查询计划以查看查询类型,请参阅stackoverflow.com/a/7359705/507793 了解如何获取查询计划。
-
默认超时是多少? 30 秒?强烈建议将其更改为至少几分钟。显然,也可以在该列上添加一个索引,但无论性能如何,您的所有查询都不太可能在超时内执行
-
请通过https分享查询计划;//berntozar.com/pastetheplan。还请在您的问题中添加表和索引定义。否则我们无法回答这个问题
-
@PhilCoulson 如果索引良好,没有理由在几秒钟内无法返回数百万行
-
@Charlieface 是的,没错,但我的建议更笼统。数据集可能要大得多,而且可能并不总是拥有修改索引的权限(许多数据分析师的职业生涯都是从只读权限开始的)。或者可能存在没有故意为更快插入进行优化的巨大表的索引。对我来说,30 秒对于查询超时来说似乎太短了
标签: sql-server select where-clause sqlperformance timeoutexception