某用户表有 100 万行数据,其中 gender 字段只有“男、女、未知”几个取值,而 user_id 字段几乎每行都不同。数据库管理员在评估哪些列更适合建立普通查询索引时,通常会更关注列的选择性。关于索引选择性,下列说法较合理的是()。
索引选择性可以粗略理解为某个条件能把数据范围缩小到什么程度。像 user_id 这类取值非常分散、重复度低的列,通常能快速定位少量记录,选择性较好;像 gender 这类取值很少、重复度很高的列,单独作为普通索引时过滤能力可能较弱。实际是否建索引还要结合查询频率、组合条件、数据分布和优化器成本,但考试层面通常先考“选择性越高,过滤效果越强”。
选项分析
正确。选择性好的列能更有效过滤数据,通常更容易发挥索引价值。
错误。取值少往往意味着重复度高,过滤能力可能弱,不能简单说一定更适合单列索引。
错误。索引选择性是数据库查询优化中的常见概念。
错误。字段名是否包含 id 不是判断是否需要索引的充分条件,仍要看查询场景和数据分布。
本题为什么容易错
这题容易错在把“建索引”理解成万能加速。索引不是越多越好,也不是低基数字段一定没用。考试更想看你能不能先判断过滤能力,再结合查询条件和组合索引思考。gender 单独过滤可能效果弱,但如果它和时间、状态、用户类型等条件组合,也可能在特定查询里有价值。
简短答案
索引选择性为什么会影响查询效率,正确答案是 A(取值越分散、能过滤掉越多行的列,通常选择性越好,更容易发挥索引过滤价值)。索引选择性可以粗略理解为某个条件能把数据范围缩小到什么程度。像 user_id 这类取值非常分散、重复度低的列,通常能快速定位少量记录,选择性较好;像 gender 这类取值很少、重复度很高的列,单独作为普通索引时过滤能力可能较弱。实际是否建索引还要结合查询频率、组合条件、数据分布和优化器成本,但考试层面通常先考“选择性越高,过滤效果越强”。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 取值越分散、能过滤掉越多行的列,通常选择性越好,更容易发挥索引过滤价值 | 本题正确答案 | 正确。选择性好的列能更有效过滤数据,通常更容易发挥索引价值。 | 看到题干核心场景时优先联想到它 |
| 取值越少的列一定越适合单独建索引,例如 gender 永远比 user_id 更适合 | 本题干扰项 | 错误。取值少往往意味着重复度高,过滤能力可能弱,不能简单说一定更适合单列索引。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 索引选择性只用于网络路由选路,和数据库查询无关 | 本题干扰项 | 错误。索引选择性是数据库查询优化中的常见概念。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 只要字段名包含 id,就一定不需要索引 | 本题干扰项 | 错误。字段名是否包含 id 不是判断是否需要索引的充分条件,仍要看查询场景和数据分布。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 取值越少的列一定越适合单独建索引,例如 gender 永远比 user_id 更适合:错误。取值少往往意味着重复度高,过滤能力可能弱,不能简单说一定更适合单列索引。
- 索引选择性只用于网络路由选路,和数据库查询无关:错误。索引选择性是数据库查询优化中的常见概念。
- 只要字段名包含 id,就一定不需要索引:错误。字段名是否包含 id 不是判断是否需要索引的充分条件,仍要看查询场景和数据分布。
知识点详解
基数通常指某列不同取值的数量。基数高不等于一定必须建索引,基数低也不等于永远不能建索引,但基数和选择性是判断索引价值的重要线索。考试题如果强调大量重复值、少数几个状态值,往往在提醒你过滤能力有限;如果强调唯一编号、身份证号、订单号这类高区分度字段,通常在提示选择性较好。
备考速记
速记:选择性看筛选力度。能一下筛掉大部分数据,索引更有价值;一筛还剩一大片,单列索引价值就要谨慎评估。
SQL 索引 在SQL 索引场景中的作用
SQL 索引在本题中的核心价值,是解决“某用户表有 100 万行数据,其中 gender 字段只有“男、女、未知”几个取值,而 user_id 字段几乎每行都不同。数据库管理员在评估哪些列更适合建立普通查询索引时,通常会更关注列的选择性。关于索引选择性,下列说法较合理的是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 给出SQL 索引场景,判断应该选择哪个概念、工具、协议或管理过程。
- 考查SQL 索引的作用,要求从四个相近选项中找出最符合题干目标的一项。
- 把SQL 索引和取值越少的列一定越适合单独建索引,例如 gender 永远比 user_id 更适合、索引选择性只用于网络路由选路,和数据库查询无关、只要字段名包含 id,就一定不需要索引放在一起考,重点看适用场景是否一致。
- 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
SQL 索引 在数据库系统工程师软考中的考法
软考选择题通常不会只考概念定义,还会把SQL 索引放到SQL 索引场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
老师讲索引时,经常会问:这个条件能帮数据库少看多少行?gender 只有几个取值,查“男”可能仍然命中大量记录;user_id 几乎每行不同,查一个 user_id 往往能定位到很少的行。一个像大筛子,一个像细筛子,细筛子的过滤价值通常更明显。
考点定位
索引选择性题先看字段取值是否足够分散。高基数、低重复、能明显缩小结果集的列,通常选择性更好;低基数、高重复的列,单独索引未必划算,但放到组合索引或特定查询场景中仍可能有价值。
易错提醒
- 只看字段名,不看字段取值分布和查询频率。
- 给低选择性字段盲目建立大量单列索引,增加维护成本。
- 把索引选择性和最左前缀、覆盖索引、回表这些概念混在一起,不分题干问法。
备考提示
- 复习索引选择性时,可以用“这个条件能筛掉多少行”来判断。
- 把高基数、低基数、联合索引、覆盖索引、回表、索引失效放在同一组复习。
- 数据库系统工程师索引题不要求你完整模拟优化器,但要能说出为什么某个字段过滤能力强或弱。
你可能还想了解
- 索引选择性为什么会影响查询效率?
- SQL 索引是什么?
- SQL 索引在数据库系统工程师考试中怎么考?
- 数据库系统工程师SQL 索引题怎么理解?
- 索引选择性和基数区别怎么考?
- 数据库索引选择性怎么判断怎么考?
本文小结
本题核心考点是SQL 索引在SQL 索引场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(取值越分散、能过滤掉越多行的列,通常选择性越好,更容易发挥索引过滤价值)。