用于从表中获取记录的 SQL 查询需要很长时间,但是当我运行 exec sp_updatestats 时按预期工作

Posted

技术标签:

【中文标题】用于从表中获取记录的 SQL 查询需要很长时间,但是当我运行 exec sp_updatestats 时按预期工作【英文标题】:SQL query for fetching record from a table it's taking a long time but works as expected when i run exec sp_updatestats 【发布时间】:2020-01-29 10:35:20 【问题描述】:

我在 SQL Server 2014 中有一个表,其中有大约 3 lk 数据,每天的事务是 3k。

我编写了一个查询,通过应用具有 4 列的过滤器从另一个具有非集群索引的表中获取数据。它按预期工作了 7-10 天,突然需要很长时间才能检索数据。

在这种情况下,如果我触发 exec sp_updatestats,它将按预期响应。

现在我的问题是:

    如果我运行exec sp_updatestats,它会影响我在数据库中正在进行的现有事务吗?

    使用这个exec sp_updatestats有什么缺点?

    exec sp_updatestats 有什么替代品吗?

【问题讨论】:

【参考方案1】:

广告 1. 您的交易(严格意义上)将继续进行。更新统计信息可能(并且通常会)导致重新编译。

广告 2. 它更新所有统计信息(由 SQL Server 自动创建)。因此,由于重新编译,它可以影响任何查询的下一次运行

Ad 3. 在您的情况下,为您的表运行 UPDATE STATISTICS 可能就足够了。您也可以考虑在非工作时间运行它,例如每天晚上。

【讨论】:

以上是关于用于从表中获取记录的 SQL 查询需要很长时间,但是当我运行 exec sp_updatestats 时按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

选择查询需要很长时间执行 - 查询优化

我想减少 MYSQL 查询执行时间。我的查询需要很长时间?

Hibernate - 第一个 Sql 插入需要很长时间

SQL 调优,长时间运行的查询 + rownum

用于从表中选择具有最新时间戳的行的 JOOQ 代码

查询需要很长时间才能执行 laravel