适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 数据库
智能查询处理 (IQP) 功能系列包含一系列影响广泛的功能,能够以极少的实施工作量来提升现有工作负荷的性能。 下图详细介绍了 IQP 功能系列,以及首次为SQL Server引入这些功能时。 Azure SQL 托管实例和Azure SQL 数据库中提供了所有 IQP 功能。 某些功能取决于数据库兼容性级别。
观看本视频,大致了解智能查询处理:
有关智能查询处理(IQP)功能的演示和示例代码,请参阅GitHub示例存储库。
可以通过对数据库启用适当的数据库兼容性级别使工作负荷自动符合智能查询处理条件。 可以使用Transact-SQL来设置此设置。 例如:
ALTER DATABASE [WideWorldImportersDW]
SET COMPATIBILITY_LEVEL = 170;
下表详细列出了所有智能查询处理功能,及其对数据库兼容性级别的所有要求。 有关所有 IQP 功能(包括发行说明和更深入的说明)的完整详细信息,请参阅 智能查询处理功能的详细信息。
适用于 2025 Azure SQL 数据库 和 SQL Server 的 IQP 功能
| IQP 功能 | 受支持于 Azure SQL 数据库 | SQL Server 2025 (17.x) 支持 | Description |
|---|---|---|---|
| 可选参数计划优化 (OPPO) | 是,从数据库兼容性级别 170 开始 | 是的,从SQL Server 2025(17.x)开始,数据库兼容性级别为 170 | 利用参数敏感计划优化(PSPO)改进中引入的自适应计划优化(Multiplan)基础设施,该基础设施能够从单个语句生成多个计划。 该功能可以在运行时根据参数NULL OR NOT NULL的状态选择更理想的计划,这将提高原本可能因默认选择不佳而性能欠佳的查询的性能。 |
| 表达式的基数估计 (CE) 反馈 | 是,从数据库兼容性级别 170 开始 | 是的,从 SQL Server 2025 (17.x) 开始,数据库兼容性级别为 160 | 扩展 CE 反馈,通过学习以前的执行并自动将适当的 CE 模型选项应用于这些表达式的未来执行,从而改进跨查询重复表达式的基数估计。 |
| OPTIMIZED_SP_EXECUTESQL | Yes | 是的,从 SQL Server 2025 (17.x) 开始 | 有效地减少编译风暴的影响。 编译风暴是同时编译大量查询,导致性能问题和资源争用的情况。 启用此功能以允许从编译角度调用 sp_executesql 的行为与对象(如存储过程和触发器)类似。 |
适用于 Azure SQL 数据库 和 SQL Server 2022 的 IQP 功能
| IQP 功能 | Azure SQL 数据库 提供支持 | SQL Server 2022(16.x)及更高版本中受支持 | Description |
|---|---|---|---|
| 自适应联接(批处理模式) | 是,从数据库兼容性级别 140 开始 | 是的,从 SQL Server 2017(14.x)开始,数据库兼容性级别为 140 | 自适应联接在运行时期间根据实际输入行动态选择联接类型。 |
| 非重复近似计数 | Yes | 是的,从 2019 年 SQL Server 开始 (15.x) | 为大数据方案提供近似 COUNT DISTINCT 值,其优点是高性能和内存占用不足。 |
| 近似百分位数 | 是,从数据库兼容性级别 110 开始 | 是的,从 SQL Server 2022(16.x)开始,兼容级别为 110 | 快速计算具有基于排名的可接受误差范围的大型数据集的百分位数,以帮助使用近似百分位数聚合函数快速做出决策。 |
| 行存储上的批处理模式 | 是,从数据库兼容性级别 150 开始 | 是的,从 SQL Server 2019 (15.x) 开始,兼容级别为 150 | 可为 CPU 绑定关系的 DW 工作负荷提供批处理模式,无需列存储索引。 |
| 基数估计 (CE) 反馈 | 是,从数据库兼容性级别 160 开始 | 是的,从 SQL Server 2022(16.x)开始,兼容级别为 160 | 自动调整重复查询的基数估计,以优化低效的 CE 假设导致查询性能不佳的工作负载。 CE 反馈将识别并使用更适合给定查询和数据分布的模型假设,以提高查询执行计划的质量。 |
| 并行度 (DOP) 反馈 | 是,从数据库兼容性级别 160 开始 | 是,从数据库兼容性级别 160 开始 | 自动调整重复查询的并行度,以针对并行度低可能导致性能问题的工作负载进行优化。 需要启用查询存储。 |
| 交错执行 | 是,从数据库兼容性级别 140 开始 | 是的,从 SQL Server 2017(14.x)开始,数据库兼容性级别为 140 | 使用首次编译时遇到的多语句表值函数的实际基数,而不是固定的猜测值。 |
| 内存授予反馈(批处理模式) | 是,从数据库兼容性级别 140 开始 | 是的,从 SQL Server 2017(14.x)开始,数据库兼容性级别为 140 | 如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
| 内存授予反馈(行模式) | 是,从数据库兼容性级别 150 开始 | 是的,从 SQL Server 2019(15.x)开始,数据库兼容性级别为 150 | 如果行模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
| 内存授予反馈(百分位数) | 是,在所有数据库上启用 | 是的,从 SQL Server 2022 (16.x)开始,数据库兼容性级别为 140 | 通过合并过去的查询执行来优化反馈,以非侵入性方式解决内存授予反馈的现有限制。 |
| 内存授予反馈持久性 | 是,在所有数据库上启用 | 是的,从 SQL Server 2022 (16.x)开始,数据库兼容性级别为 140 | 提供新功能持久保留内存授予反馈。 要求为数据库启用 查询存储,并在 READ_WRITE 模式下运行。 |
| CE 反馈持久性 | 是,从数据库兼容性级别 160 开始 | 是的,从SQL Server 2022(16.x)开始,数据库兼容性级别为 160 | 要求在数据库中启用 查询存储 并使用 READ_WRITE 模式。 |
| 使用查询存储强制执行优化计划 | Yes | 是的,从 SQL Server 2022 (16.x) 开始)。 | 减少了重复强制查询的编译开销。 有关详细信息,请参阅 Optimized 计划强制使用 查询存储。 |
| 标量 UDF 内联 | 是,从数据库兼容性级别 150 开始 | 是的,从 SQL Server 2019(15.x)开始,数据库兼容性级别为 150 | 标量 UDF 将转换为内联在调用查询中的等效关系表达式,这通常会使性能显著提升。 |
| 参数敏感计划优化 | 是,从数据库兼容性级别 160 开始 | 是的,从 SQL Server 2022 (16.x) 开始,数据库兼容性级别为 160 | 参数敏感计划优化旨在解决通过参数化查询生成的单个缓存计划无法针对所有潜在传入参数值(如非均匀数据分布)提供最佳性能的问题。 |
| 表变量延迟编译 | 是,从数据库兼容性级别 150 开始 | 是的,从 SQL Server 2019(15.x)开始,数据库兼容性级别为 150 | 使用首次编译时遇到的表变量的实际基数,而不是固定的猜测值。 |
适用于Azure SQL 托管实例的 IQP 功能
| IQP 功能 | 在Azure SQL托管实例中支持 | Description |
|---|---|---|
| 自适应联接(批处理模式) | 是,从数据库兼容性级别 140 开始 | 自适应联接在运行时期间根据实际输入行动态选择联接类型。 |
| 非重复近似计数 | Yes | 为大数据方案提供近似 COUNT DISTINCT 值,其优点是高性能和内存占用不足。 |
| 近似百分位数 | 是,从数据库兼容性级别 110 开始 | 快速计算具有基于排名的可接受误差范围的大型数据集的百分位数,以帮助使用近似百分位数聚合函数快速做出决策。 |
| 行存储上的批处理模式 | 是,从数据库兼容性级别 150 开始 | 可为 CPU 绑定关系的 DW 工作负荷提供批处理模式,无需列存储索引。 |
| 基数估计 (CE) 反馈 | 是,从数据库兼容性级别 160 开始 | 自动调整重复查询的基数估计,以优化低效的 CE 假设导致查询性能不佳的工作负载。 CE 反馈将识别并使用更适合给定查询和数据分布的模型假设,以提高查询执行计划的质量。 |
| 表达式的基数估计 (CE) 反馈 | 是的,从 Azure SQL 托管实例的数据库兼容性级别 160 开始,SQL Server 2025 或 始终保持最新更新策略。 否,对于 SQL Server 2022 更新策略。 | 扩展 CE 反馈,通过学习以前的执行并自动将适当的 CE 模型选项应用于这些表达式的未来执行,从而改进跨查询重复表达式的基数估计。 |
| 并行度 (DOP) 反馈 | 是的,在 Azure SQL 托管实例中从数据库兼容性级别 160 开始,适用于SQL Server 2025或始终保持更新更新策略。 否,对于 SQL Server 2022 更新策略。 | 自动调整重复查询的并行度,以针对并行度低可能导致性能问题的工作负载进行优化。 需要启用查询存储。 |
| 交错执行 | 是,从数据库兼容性级别 140 开始 | 使用首次编译时遇到的多语句表值函数的实际基数,而不是固定的猜测值。 |
| 内存授予反馈(批处理模式) | 是,从数据库兼容性级别 140 开始 | 如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
| 内存授予反馈(行模式) | 是,从数据库兼容性级别 150 开始 | 如果行模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
| 内存授予反馈(百分位数) | 是,从数据库兼容性级别 160 开始 | 通过合并过去的查询执行来优化反馈,以非侵入性方式解决内存授予反馈的现有限制。 |
| 内存授予、CE 和 DOP 反馈持久性 | 是,从数据库兼容性级别 160 开始 | 提供新功能持久保留内存授予反馈。 CE 和 DOP 反馈始终保留。 要求在数据库中启用 查询存储 并使用 READ_WRITE 模式。 |
| 可选参数计划优化 (OPPO) | 是的,从数据库兼容级别 170 开始,在 Azure SQL 托管实例中,适用于 SQL Server 2025 或“始终保持最新”更新策略。 否,对于 SQL Server 2022 更新策略。 | 利用参数敏感计划优化(PSPO)改进中引入的自适应计划优化(Multiplan)基础设施,该基础设施能够从单个语句生成多个计划。 该功能可以在运行时根据参数NULL OR NOT NULL的状态选择更理想的计划,这将提高原本可能因默认选择不佳而性能欠佳的查询的性能。 |
| 使用查询存储强制执行优化计划 | 无 | 减少了重复强制查询的编译开销。 有关详细信息,请参阅 Optimized 计划强制使用 查询存储。 |
| 参数敏感计划优化 | 是,从数据库兼容性级别 160 开始 | 参数敏感性计划优化用于解决这样的情况:一个参数化查询的单个缓存计划对于所有可能传入的参数值并不是最优的,例如,比如非均匀的数据分布。 |
| 标量 UDF 内联 | 是,从数据库兼容性级别 150 开始 | 标量 UDF 将转换为内联在调用查询中的等效关系表达式,这通常会使性能显著提升。 |
| 表变量延迟编译 | 是,从数据库兼容性级别 150 开始 | 使用首次编译时遇到的表变量的实际基数,而不是固定的猜测值。 |
SQL Server 2019 的 IQP 功能
| IQP 功能 | SQL Server 2019 (15.x) 支持 | Description |
|---|---|---|
| 自适应联接(批处理模式) | 是的,从 SQL Server 2017(14.x)开始,数据库兼容性级别为 140 | 自适应联接在运行时期间根据实际输入行动态选择联接类型。 |
| 非重复近似计数 | Yes | 为大数据方案提供近似 COUNT DISTINCT 值,其优点是高性能和内存占用不足。 |
| 行存储上的批处理模式 | 是,从数据库兼容性级别 150 开始 | 可为 CPU 绑定关系的 DW 工作负荷提供批处理模式,无需列存储索引。 |
| 交错执行 | 是,从数据库兼容性级别 140 开始 | 使用首次编译时遇到的多语句表值函数的实际基数,而不是固定的猜测值。 |
| 内存授予反馈(批处理模式) | 是,从数据库兼容性级别 140 开始 | 如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
| 内存授予反馈(行模式) | 是,从数据库兼容性级别 150 开始 | 如果行模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
| 标量 UDF 内联 | 是,从数据库兼容性级别 150 开始 | 标量 UDF 将转换为内联在调用查询中的等效关系表达式,这通常会使性能显著提升。 |
| 表变量延迟编译 | 是,从数据库兼容性级别 150 开始 | 使用首次编译时遇到的表变量的实际基数,而不是固定的猜测值。 |
SQL Server 2017 的 IQP 功能
| IQP 功能 | SQL Server 2017 (14.x) 支持 | Description |
|---|---|---|
| 自适应联接(批处理模式) | 是的,从 SQL Server 2017(14.x)开始,数据库兼容性级别为 140 | 自适应联接在运行时期间根据实际输入行动态选择联接类型。 |
| 非重复近似计数 | Yes | 为大数据方案提供近似 COUNT DISTINCT 值,其优点是高性能和内存占用不足。 |
| 交错执行 | 是,从数据库兼容性级别 140 开始 | 使用首次编译时遇到的多语句表值函数的实际基数,而不是固定的猜测值。 |
| 内存授予反馈(批处理模式) | 是,从数据库兼容性级别 140 开始 | 如果批处理模式查询有溢出到磁盘的操作,则需为以后的执行添加更多内存。 如果查询浪费所分配内存的 > 50% 以上,则减少连续执行的内存授予大小。 |
查询存储要求
智能查询处理功能的几个套件要求启用 查询存储 才能使用户数据库受益。 若要启用查询存储,请参阅 启用 查询存储。
| IQP 功能 | 需要启用 查询存储,并且READ_WRITE |
|---|---|
| 自适应联接(批处理模式) | No |
| 非重复近似计数 | No |
| 近似百分位数 | No |
| 行存储上的批处理模式 | No |
| 基数估计 (CE) 反馈 | Yes |
| 并行度 (DOP) 反馈 | Yes |
| 交错执行 | No |
| 内存授予反馈(批处理模式) | No |
| 内存授予反馈(行模式) | No |
| 内存授予反馈(百分位数和持久性模式) | Yes |
| 使用查询存储强制执行优化计划 | Yes |
| 标量 UDF 内联 | No |
| 参数敏感计划优化 | 否,但建议使用 |
| 表变量延迟编译 | No |