【问题标题】:Database Compatibility Level数据库兼容级别
【发布时间】:2018-12-16 00:13:12
【问题描述】:

我看到了一个我无法解释的情况,我知道你们可以给我一个线索来了解它的原因。

我有一个非常“未优化”的查询,由我们的一位客户编写并基于我们的客户电子邮件,在我将数据库兼容性级别更改为 2016 之前,它在不到 30 秒内运行。在此更改之后,我等了 2 个多小时,但我没有从这个查询中得到任何结果。经过一番挣扎后,我将数据库兼容级别改回了 2008 年,一切都回到了正确的位置。

任何身体,任何想法?请!

非常感谢...

【问题讨论】:

  • 没有更多关于查询的细节,很难猜对!
  • 如果您对查询有任何疑问,请发布查询、表架构及其执行计划。当唯一的信息是it's slow 时,人们无法猜测出什么问题
  • SQL Server 在这些版本之间更改了基数估计器。这可能是它现在这么慢的原因。
  • 更改兼容级别后尝试更新统计信息,然后再次运行查询。但是如果没有快速查询的计划,我们所有的假设都是一种占卜。

标签: sql sql-server database


【解决方案1】:

SQL Server 2016的数据库兼容级别为130,SQL Server 2008的兼容级别为100。

以下是有关兼容性级别差异的链接:

ALTER DATABASE (Transact-SQL) 兼容级别:

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level?view=sql-server-2017#differences-between-compatibility-level-130-and-level-140

我们不知道您的查询。所以我只是猜测您的数据库可能是在兼容级别 100 下创建的。当您将兼容级别更改为 130 并运行查询时,就会出现问题。

兼容性级别只影响指定数据库的行为,而不影响整个服务器。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多