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

MSSQL中SELECT COUNT DISTINCT查询耗时40秒优化求助

SQL查询性能优化方案
  • 核心问题分析
    你提交的两个查询逻辑完全等价,仅调整查询写法不会改变执行效率,耗时高的根本原因是缺少匹配查询逻辑的覆盖索引,导致执行时需要扫描全表或聚集索引,产生大量IO开销。
  • 最优优化方案:创建覆盖型非聚集索引
    直接创建完全匹配查询逻辑的覆盖索引,无需回表即可完成所有计算,耗时可降至秒级甚至毫秒级,创建语句如下:
CREATE NONCLUSTERED INDEX IX_Q_Net_Ml_SportsDetailsActivity_monthly_MerchantID_Year_INCLUDE
ON Q_Net_Ml_SportsDetailsActivity_monthly (MerchantID, Year, WagerCount)
INCLUDE (League, ExternalCustomerID)
WITH (ONLINE = ON); -- 生产环境添加ONLINE参数避免锁表影响业务

索引设计逻辑说明:

等值查询条件MerchantID=584、Year=2021放在索引最前列,可以快速定位到符合条件的数据集前缀;范围过滤条件WagerCount>0紧随其后,可直接在索引层面过滤掉不符合条件的行;最后用INCLUDE语法把需要分组和去重的League、ExternalCustomerID加到索引叶子节点,实现查询100%走索引覆盖,无需访问原表数据。

  • 其他补充说明
    你之前强制指定的NCSI_Q_Net_Ml_SportsDetailsActivity_monthly索引没有覆盖所有需要的字段,执行时要么需要回表拉取数据,要么需要做额外的排序、哈希去重操作,无法达到最优性能。新索引创建后不需要在查询里加INDEX强制提示,优化器会自动选择最优索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:54:01