文档介绍:()(a)表式系统(b)(最小)关系的(c)关系完备的(d)全关系的说明:圆表示关系数据模型S(Structure):数据结构M(Manipulation):数据操纵I(Integrity):,==“c02”假定sc有10000个记录,s有1000个记录,选修c02课程的选课记录为50个。方案1:∏sname(=∧o=“c02”(SSC))方案2:∏sname(o=“c02”(SSC)方案3:∏sname(So=“c02”(SC))思考:分析实现三种方案的办法,哪一种效率更高?:∏sname(=∧o=“c02”(SSC))笛卡尔积运算(假定每秒读写20块)读块数:100块+20遍100块=2100,写块数:1000000;共需时间:1002100/20=50105秒选择运算读块数:1000000;共需时间:1000000/20=50000秒方案1读写磁盘共需50105+50000=100105秒S1000条Sc10000条c02的50条100条SC中记录10条S中记录读S一次:1000/10=100块读SC一次:10000/100=100块完成乘积需读SC:10000/10*5=20遍10条S中记录10条S中记录10条S中记录10条S中记录块10条记录写SSC:10000000/10=1000000块SSC有10000000记录,:∏sname(o=“c02”(SSC)自然连接运算(假定每秒读写20块)读块数:100块+20遍100块=2100,写块数:1000;共需时间:3100/20=155秒选择运算读块数:1000;共需时间:1000/20=50秒方案2读写磁盘共需155+50=205秒S1000条Sc10000条c02的50条100条SC中记录10条S中记录读S一次:1000/10=100块读SC一次:10000/100=100块完成需读SC:10000/10*5=20遍10条S中记录10条S中记录10条S中记录10条S中记录块10条记录写SSC:10000/10=1000块SSC有10000记录,:∏sname(So=“c02”(SC))选择运算(假定每秒读写20块)读块数:100;共需时间:100/20=5秒自然连接运算读块数:100,写块数:5;共需时间:105/20=5秒方案3读写磁盘共需5+5=10秒S1000条Sc10000条c02的50条100条SC中记录10条S中记录读S一次:1000/10=100块读SC一次:10000/100=100块100条记录SC有50记录,每块完成需读S一遍块10条记录(SC)S有50记录,每写(SC)S:50/10=,显然方案3的执行效率更高。在执行关系代数表达式中的一个很简单的变化,即先做选择后再做连接,而不是先做连接后做选择,就使得执行的性能有了戏剧性的变化。o上有索引或哈希,那么第一步读入的元组数将从10000降到50,这将使执行性能比原来有进一步的提高。同样如果S表在属性sno上有索引或哈希,那么第二步读入的元组数将从1000降到50,这将使执行性能比原来又有提高。以上例子,虽然简单,但足以说明为什么查询优化是必要的,也可以说明在实际中什么样的优化是可能的。