问答题
某学校的学籍管理系统实现了对学生学籍信息的管理,其中学生表结构为:学生表(学号,姓名,性别,系号,是否有学籍),此表中除学号列有唯一索引外,其他列均无索引。
问答题
设学籍管理系统中经常执行如下形式的操作:
SELECT*FROM学生表
WHERE姓名='张三'AND系号='10'AND是否有学籍='有'
系统运行中发现这类操作的效率比较低,系统工程师建议:由于查询条件中使用了“系号”、“姓名”和“是否有学籍”三列,建议在这三个列上分别建立索引,以提高查询效率。
请问其建议建立的三个索引是否都能提高查询效率?请简要说明原因。
【正确答案】不能都提高查询效率,对于姓名和系号上建立索引能够提高查询效率,但是在是否有学籍属性列上由于只有两种取值:有或是没有,若在其上建立索引,则平均起来,每个属性值对应一半的元组,用索引检索,并不能明显加快检索的速度。
【答案解析】
问答题
设学生表中有下列数据:
| 学号 |
姓名 |
性别 |
系号 |
是否有学籍 |
| 2008337 |
丁一 |
男 |
10 |
有 |
| 2008338 |
房彬彬 |
女 |
10 |
有 |
| 2008339 |
马宏伟 |
男 |
10 |
有 |
| 2008556 |
王斌 |
男 |
20 |
有 |
| 2008558 |
张伟 |
男 |
20 |
有 |
| 2008559 |
丁二 |
女 |
20 |
无 |
并且已经在学生表的姓名列上建立了一个非聚集索引(按姓名拼音升序排序)。请给出查找码“姓名”对应的稠密索引示意图。