You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Synapse 专用SQL池如何使用表查询提示(Index Hints)

Azure Synapse 专用SQL池查询提示兼容方案

首先明确:Azure Synapse 专用SQL池原生不支持传统SQL Server中的表级索引提示(如with (index = XXX)写法),你遇到的优化器选错执行计划的问题,可通过以下专用SQL池兼容的方案解决:

  • 第一步:校准统计信息
    专用SQL池默认不会自动更新统计信息,优化器基数估计错误是绝大多数执行计划异常的根因。先执行全量统计信息更新,再验证执行计划:
    UPDATE STATISTICS Daily WITH FULLSCAN;
    UPDATE STATISTICS MultiDayProperties WITH FULLSCAN;
    
  • 第二步:使用合法的查询级提示
    专用SQL池支持部分查询级提示,可强制join顺序和join类型,避免优化器选择广播连接:
    select d.*, mp.* from Daily d
    inner join MultiDayProperties mp on (mp.id = d.propertyid)
    where d.reportDate = '20210914' 
    and mp.param1='abc' and mp.param2='cde'
    -- 以下为合法提示,强制按语句写的顺序join,且使用哈希join
    OPTION (FORCE ORDER, HASH JOIN);
    
  • 第三步:临时表预过滤强制分布规则
    如果提示无效,可将过滤后的小表结果预存入和关联表分布键一致的临时表,从底层规则上避免跨节点数据移动,性能稳定性最高:
    -- 预过滤属性表,指定分布键和Daily表的关联字段匹配
    CREATE TABLE #FilteredMP
    WITH (DISTRIBUTION = HASH(id))
    AS
    SELECT id, param1, param2, [其余需要返回的字段]
    FROM MultiDayProperties
    WHERE param1='abc' AND param2='cde';
    
    -- 两张表分布键一致,无数据移动,执行本地join
    SELECT d.*, fmp.*
    FROM Daily d
    INNER JOIN #FilteredMP fmp ON fmp.id = d.propertyid
    WHERE d.reportDate = '20210914';
    

补充说明:当前专用SQL池未提供表级索引提示的兼容语法,上述方案可完全覆盖你描述的场景,不需要使用传统SQL Server的索引提示写法。

内容的提问来源于stack exchange,提问作者Yolt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:45:02