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

SQL Server低选择性场景下获取男女会员最新更新时间的高效索引方案

SQL Server 高效索引优化:按性别查询会员最新更新时间及数量

问题场景

在SQL Server环境中,需从membership表查询男女会员的最新更新时间、会员总数。该表sex字段选择性极低,仅包含两类值:男性('M')887409条,女性('F')679003条。

涉及查询语句及结果

统计男女会员数量

SELECT sex, COUNT(1) FROM membership GROUP BY sex

执行结果:

sexCOUNT(1)
M887409
F679003

查询男女会员最新更新时间

SELECT sex, MAX(UpdateTime) FROM membership GROUP BY sex

执行结果:

sexmax(UpdateTime)
M2023-05-29 18:30:09
F2023-05-27 12:23:55

最优索引方案

由于sex字段选择性极低,常规单键索引优化效果有限,建议创建覆盖索引,直接包含查询所需全部字段,避免回表查询:

CREATE NONCLUSTERED INDEX IX_membership_Sex_UpdateTime ON membership (sex)
INCLUDE (UpdateTime);

方案说明

  1. 以sex为索引键:让SQL Server快速按性别聚合分组,将同性别数据归类到一起。
  2. 包含UpdateTime字段:索引直接覆盖MAX(UpdateTime)计算和COUNT(1)统计需求,无需访问原表数据,大幅提升查询效率。
  3. 可选进阶优化:如果想进一步强化MAX(UpdateTime)的查询速度,可将索引调整为:
    CREATE NONCLUSTERED INDEX IX_membership_Sex_UpdateTimeDesc ON membership (sex, UpdateTime DESC);
    
    这种结构下,每个性别分组的第一条记录就是最新的UpdateTime,MAX查询会直接取该值;但对COUNT查询的优化效果和第一种索引一致。

注意点

  • 若sex字段存在NULL值,上述索引会自动将NULL作为单独分组统计(若业务需要)。
  • 索引会增加数据写入(插入/更新/删除)的开销,需平衡查询性能提升与写入性能影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:45:06