首页 >

下列关于辅助索引说法错误的是()

这是一个非常经典的基础理论题,考察的是数据库索引(特别是**稠密索引与稀疏索引**、**聚集索引与辅助索引**)的核心概念。
首先直接给出结论:**B 选项是错误的**。评论里说四个都对,可能是因为对“稀疏”和“稠密”在特定实现下的理解有偏差,但在标准的数据库教材(如《数据库系统概念》——黑皮书)理论中,B 绝对是错的。
1. 核心概念辨析
稠密索引 (Dense Index)**:文件中的**每一个**搜索码值在索引中都有一个索引项。
稀疏索引 (Sparse Index)**:只为搜索码的**部分**值建立索引项。只有当数据文件是按搜索码**物理排序**(即聚集索引)时,稀疏索引才能工作。
*   **辅助索引 (Secondary Index)**:也叫非聚集索引。数据文件本身的物理存储顺序与索引的搜索码顺序**不一致**。
2. 逐一分析选项
A. 如果一条关系可以有不止一条包含相同搜索码值的记录,则该搜索码称为非唯一性搜索码。
*   **解释**:这是基本定义。如果一个字段(搜索码)允许重复值(比如“年龄”字段,很多人都是20岁),那它就是非唯一性的。
*   **结论**:正确。
B. 辅助索引通常是稀疏的以节省空间,并且每个搜索码值在索引中严格对应唯一一个索引项。(错误项)
错误点1:辅助索引必须是“稠密”的,不能是“稀疏”的。**
原因**:稀疏索引的工作前提是“数据有序”。如果索引里没记录某个值 $K$,你可以找比 $K$ 小的最大索引项,然后去磁盘顺序往后找。但**辅助索引对应的数据是乱序存放的**,如果你在索引里找不到值 $K$,你根本不知道它在磁盘的哪个角落。所以,辅助索引必须为每一个搜索码值都建立索引项。
错误点2:索引项的对应关系。
如果是非唯一性搜索码,一个搜索码值在索引中可能对应一个“指针桶”(一堆指针),而不是“严格对应唯一一个索引项”(除非这里的“索引项”包含了指针桶的概念,但结合前半句的“稀疏”,该选项明显是把辅助索引和聚集索引的概念记混了)。
结论:错误。
 C. 辅助索引只存储部分搜索码值,则具有中间搜索码值的记录可能存在于文件中的任何位置。
解释:这句话其实是在**解释为什么辅助索引不能是稀疏的**。如果(假设)辅助索引只存了部分值(稀疏了),因为数据是无序的,那么那些没被索引记录的“中间值”可能散落在磁盘的任何地方,导致无法通过顺序扫描找到。
结论**:正确(它描述了一种“如果成立则会导致混乱”的逻辑后果)。
D. 非唯一性搜索码上的辅助索引中的指针不会直接指向记录。
解释**:如果搜索码不唯一(比如搜“张三”,有10个张三),索引项通常不会直接指向量记录,而是指向一个**指针桶 (Bucket)**,桶里才存放着指向那10条记录的物理地址。或者像 MySQL InnoDB 那样,辅助索引指向的是主键值(间接指向)。
结论:正确。
 3. 为什么有人会说“四个都对”?(深度解析误区)
评论区的争论通常来自于**理论模型**与**具体实现(B+树)**的混淆:
1.  **关于稀疏性**:在 B+ 树索引中,**非叶子节点**确实是“稀疏”的(它们只存部分键作为路标)。但当我们讨论“辅助索引是稠密还是稀疏”时,指的是**叶子节点层**。在叶子节点层,辅助索引必须包含所有数据行的信息(或所有不同的键值),因此在逻辑上它被归类为**稠密索引**。
2.  **关于 B 选项的后半句**:有人认为“每个键值对应一个索引项”是对的。但在标准考试中,B 选项前半句关于“辅助索引通常是稀疏的”这句断言是考点的重灾区,是经典的错误表述。
总结
这道题考的是:**辅助索引(Secondary Index)由于数据物理无序,必须是稠密(Dense)索引。
*   **聚集索引**:可以是稠密的,也可以是稀疏的。
*   **辅助索引**:必须是稠密的。
**所以 B 选项说“辅助索引通常是稀疏的”是明显的概念性错误。**
1. 首先分析选项A: - 如果在一条关系中,有不止一条记录包含相同的搜索码值,那么这个搜索码确实被称为非唯一性搜索码。例如,在一个学生成绩表中,如果有多个学生的学号是相同的(这是不合理的,但用于说明概念),那么学号这个搜索码就是非唯一性搜索码。所以选项A正确。 2. 接着看选项B: - 辅助索引是可以是稀疏的,并且每个搜索码值可以对应多个索引项。比如在一个图书数据库中,对于“作者”这个搜索码,如果一个作者有多本书,那么“作者”这个搜索码值就有多个索引项,而且可能不是每一个作者都有索引项(即稀疏的情况)。所以选项B正确。 3. 再看选项C: - 当辅助索引只存储部分搜索码值时,具有中间搜索码值的记录可能存在于文件中的任何位置。例如,对于一个按照书名首字母排序的图书索引,如果只索引了部分书名,那么中间书名的图书可能在书架的任何位置。所以选项C正确。 4. 最后看选项D: - 非唯一性搜索码上的辅助索引中的指针是可以直接指向记录的。比如在员工信息表中,对于“部门”这个非唯一性搜索码,如果要查找某个部门的员工信息,辅助索引中的指针可以直接指向相关员工记录。所以选项D错误。 答案是D。
发表于 2024-10-04 18:49:24 回复(0)
其实,ABCD都对。

硬要说B不对,它不对的点也应该在后半句上略有模糊:索引项应该是一个指针,指针指向一个桶/链表 etc,而非多个索引项(因为如果是 答案中解释的‘辅助索引一定要是稠密的’, 那么选项C也不对,因为C的前半句和B的前半句是相同的,都是说辅助索引可以是sparse indexing)。

但总归来说,题目描述模糊,感觉像是英文题目直接机翻抄过来的,但没翻译明白。
发表于 2025-02-14 22:28:38 回复(2)
我来说一下:
搜索码(Search Key)值指的是你在创建索引时指定的列值,
当这个值在表中出现多次时,会生成多个索引项(即多个记录)。
中间节点(非叶子节点):并不保存全部数据,而是保存用于导航的“中间搜索码值”。
发表于 2025-05-19 09:06:51 回复(0)
这是一个非常经典的基础理论题,考察的是数据库索引(特别是**稠密索引与稀疏索引**、**聚集索引与辅助索引**)的核心概念。
首先直接给出结论:**B 选项是错误的**。评论里说四个都对,可能是因为对“稀疏”和“稠密”在特定实现下的理解有偏差,但在标准的数据库教材(如《数据库系统概念》——黑皮书)理论中,B 绝对是错的。
1. 核心概念辨析
稠密索引 (Dense Index)**:文件中的**每一个**搜索码值在索引中都有一个索引项。
稀疏索引 (Sparse Index)**:只为搜索码的**部分**值建立索引项。只有当数据文件是按搜索码**物理排序**(即聚集索引)时,稀疏索引才能工作。
*   **辅助索引 (Secondary Index)**:也叫非聚集索引。数据文件本身的物理存储顺序与索引的搜索码顺序**不一致**。
2. 逐一分析选项
A. 如果一条关系可以有不止一条包含相同搜索码值的记录,则该搜索码称为非唯一性搜索码。
*   **解释**:这是基本定义。如果一个字段(搜索码)允许重复值(比如“年龄”字段,很多人都是20岁),那它就是非唯一性的。
*   **结论**:正确。
B. 辅助索引通常是稀疏的以节省空间,并且每个搜索码值在索引中严格对应唯一一个索引项。(错误项)
错误点1:辅助索引必须是“稠密”的,不能是“稀疏”的。**
原因**:稀疏索引的工作前提是“数据有序”。如果索引里没记录某个值 $K$,你可以找比 $K$ 小的最大索引项,然后去磁盘顺序往后找。但**辅助索引对应的数据是乱序存放的**,如果你在索引里找不到值 $K$,你根本不知道它在磁盘的哪个角落。所以,辅助索引必须为每一个搜索码值都建立索引项。
错误点2:索引项的对应关系。
如果是非唯一性搜索码,一个搜索码值在索引中可能对应一个“指针桶”(一堆指针),而不是“严格对应唯一一个索引项”(除非这里的“索引项”包含了指针桶的概念,但结合前半句的“稀疏”,该选项明显是把辅助索引和聚集索引的概念记混了)。
结论:错误。
 C. 辅助索引只存储部分搜索码值,则具有中间搜索码值的记录可能存在于文件中的任何位置。
解释:这句话其实是在**解释为什么辅助索引不能是稀疏的**。如果(假设)辅助索引只存了部分值(稀疏了),因为数据是无序的,那么那些没被索引记录的“中间值”可能散落在磁盘的任何地方,导致无法通过顺序扫描找到。
结论**:正确(它描述了一种“如果成立则会导致混乱”的逻辑后果)。
D. 非唯一性搜索码上的辅助索引中的指针不会直接指向记录。
解释**:如果搜索码不唯一(比如搜“张三”,有10个张三),索引项通常不会直接指向量记录,而是指向一个**指针桶 (Bucket)**,桶里才存放着指向那10条记录的物理地址。或者像 MySQL InnoDB 那样,辅助索引指向的是主键值(间接指向)。
结论:正确。
 3. 为什么有人会说“四个都对”?(深度解析误区)
评论区的争论通常来自于**理论模型**与**具体实现(B+树)**的混淆:
1.  **关于稀疏性**:在 B+ 树索引中,**非叶子节点**确实是“稀疏”的(它们只存部分键作为路标)。但当我们讨论“辅助索引是稠密还是稀疏”时,指的是**叶子节点层**。在叶子节点层,辅助索引必须包含所有数据行的信息(或所有不同的键值),因此在逻辑上它被归类为**稠密索引**。
2.  **关于 B 选项的后半句**:有人认为“每个键值对应一个索引项”是对的。但在标准考试中,B 选项前半句关于“辅助索引通常是稀疏的”这句断言是考点的重灾区,是经典的错误表述。
总结
这道题考的是:**辅助索引(Secondary Index)由于数据物理无序,必须是稠密(Dense)索引。
*   **聚集索引**:可以是稠密的,也可以是稀疏的。
*   **辅助索引**:必须是稠密的。
**所以 B 选项说“辅助索引通常是稀疏的”是明显的概念性错误。**
发表于 2026-03-09 14:01:46 回复(0)