数据库系统工程师 · 高频练习

索引选择性为什么会影响查询效率?

中级 单选题 第 646 题 中等 数据库系统工程师索引选择性基数查询优化SQL 索引
题目

某用户表有 100 万行数据,其中 gender 字段只有“男、女、未知”几个取值,而 user_id 字段几乎每行都不同。数据库管理员在评估哪些列更适合建立普通查询索引时,通常会更关注列的选择性。关于索引选择性,下列说法较合理的是()。

A 取值越分散、能过滤掉越多行的列,通常选择性越好,更容易发挥索引过滤价值
B 取值越少的列一定越适合单独建索引,例如 gender 永远比 user_id 更适合
C 索引选择性只用于网络路由选路,和数据库查询无关
D 只要字段名包含 id,就一定不需要索引
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

索引选择性可以粗略理解为某个条件能把数据范围缩小到什么程度。像 user_id 这类取值非常分散、重复度低的列,通常能快速定位少量记录,选择性较好;像 gender 这类取值很少、重复度很高的列,单独作为普通索引时过滤能力可能较弱。实际是否建索引还要结合查询频率、组合条件、数据分布和优化器成本,但考试层面通常先考“选择性越高,过滤效果越强”。

选项分析

A

正确。选择性好的列能更有效过滤数据,通常更容易发挥索引价值。

B

错误。取值少往往意味着重复度高,过滤能力可能弱,不能简单说一定更适合单列索引。

C

错误。索引选择性是数据库查询优化中的常见概念。

D

错误。字段名是否包含 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(取值越分散、能过滤掉越多行的列,通常选择性越好,更容易发挥索引过滤价值)。