(续)选择操作的实现*[例9.1]SELECT*FROMStudentWHERE<条件表达式>考虑<条件表达式>的几种情况:系统概论C1:无条件;C2:Sno='201215121C3: Sage>20;C4:Sdept='CS'ANDSage>20;An Introduction to Database System
An Introduction to Database System 选择操作的实现(续) ❖[例9.1] SELECT * FROM Student WHERE <条件表达式> 考虑<条件表达式>的几种情况: C1:无条件; C2:Sno='201215121'; C3:Sage>20; C4:Sdept='CS' AND Sage>20;
(续)选择操作的实现*全表扫描算法假设可以使用的内存为M块,全表扫描算法思想:按照物理次序读Student的M块到内存检查内存的每个元组t,如果满足选择条件,则输出t如果student还有其他块未被处理,重复①和②数据库系AnIntroductiontoDatabaseSystem
An Introduction to Database System 选择操作的实现(续) ❖全表扫描算法 ◼ 假设可以使用的内存为M块,全表扫描算法思想: ① 按照物理次序读Student的M块到内存 ② 检查内存的每个元组t,如果满足选择条件,则输出t ③ 如果student还有其他块未被处理,重复①和②
(续)选择操作的实现必索引扫描算法7[例9.1-C2]SELECT福FROMStudentWHERESn0='201215121假设Sno上有索引(或Sno是散列码)算法:使用索引(或散列)得到Sno为201215121元组的指针通过元组指针在Student表中检索到该学生AnIntroductiontoDatabaseSystem
An Introduction to Database System 选择操作的实现(续) ❖索引扫描算法 ❖[例9.1-C2] SELECT * FROM Student WHERE Sno='201215121' ◼ 假设Sno上有索引(或Sno是散列码) ◼ 算法: ⚫使用索引(或散列)得到Sno为‘201215121’ 元组的指针 ⚫通过元组指针在Student表中检索到该学生
(续)选择操作的实现*[例9.1-C31SELECT*FROMStudentWHERESage>20假设Sage上有B+树索引算法:·使用B+树索引找到Sage=20的索引项,以此为入口点在B+树的顺序集上得到Sage>20的所有元组指针·通过这些元组指针到student表中检索到所有年龄大于20的学生。AnIntroductiontoDatabaseSystem
An Introduction to Database System 选择操作的实现(续) ❖[例9.1-C3] SELECT * FROM Student WHERE Sage>20 ◼ 假设Sage 上有B+树索引 ◼ 算法: ⚫ 使用B+树索引找到Sage=20的索引项,以此为入口点在 B+树的顺序集上得到Sage>20的所有元组指针 ⚫ 通过这些元组指针到student表中检索到所有年龄大于 20的学生
(续)选择操作的实现*[例9.1-C4]SELECT*FROMStudentWHERESdept='CS'ANDSage>20;假设Sdept和Sage上都有索引算法一:分别用IndexScan找到Sdept一'cS的一组元组指针和Sage>20的另一组元组指针·求这两组指针的交集·到Student表中检索·得到计算机系年龄大于20的学生AnIntroductiontoDatabaseSystem
An Introduction to Database System 选择操作的实现(续) ❖[例9.1-C4] SELECT * FROM Student WHERE Sdept='CS' AND Sage>20; ◼ 假设Sdept和Sage上都有索引 ◼ 算法一:分别用Index Scan找到Sdept=’CS’的一组元组 指针和Sage>20的另一组元组指针 ⚫ 求这两组指针的交集 ⚫ 到Student表中检索 ⚫ 得到计算机系年龄大于20的学生