数据库系统2-7:查询实例相关

文章作者 100test 发表时间 2007:03:10 17:16:47
来源 100Test.Com百考试题网


计算机等级考试训练软件《百宝箱》

 

  

  查询有多种实现方法,例如查“王平”所选修的课程编号及成绩,系统可用多种等价的关系代数表达式完成这一操作,如
  T1=?CNO , GRADE(σ-S . SNO=S_C . SNO ù S . SNAME=”王平”(SXS_C))
  T2=?CNO , GRADE(σ- SNAME=”王平”(S>< S_C))
  T3=?CNO , GRADE((σ- SNAME=”王平”(S))>< S_C)
  在这些操作中,它们的结果是一样的,但执行过程相差很大,且系统的开销也大相径庭。
  对于T1而言,当计算SXS_C时,需要把S和S-C的全部元组连接起来。假设每个存储块能保存10元组,S的物理文件在存贮器中需B1个存贮存块,S_C的物理文件需B2块。内存中提供的运算缓冲区最多能装n块,而B1、B2均大于n。因而对乘积较好的执行办法是:将S文件分成若干个n-1块,首先将第一个n-l块装入内存,并逐次装入S_C文件的一个块,使之与S已装入的n-l块进行乘积运算;当S_C文件的每块都装入一遍后,再往内存装入S文件的下一个n-l块,并同样从第一块开始逐次地装入S_C的每一块,重复执行上述连接运算,这样直到计算完乘积的全部元组为止,其读块数目为: B1 [B1/(n-1)]* B2
  设B1=B2=1500,n=80,则所需的读块的总数目为1500 [1500/79]*1500=30000。假设一秒钟能读20块时,大约需要25分钟时间。同样假设每个存储块能保存联接后的10 个元组和一秒钟能写入20块,则联接后一共有1500*1500=2250000块,将联接后的中间结果写入存储器需要1875分钟,然后再将中间结果读出来进行选择和投影,也需1875分钟。与读块和写块相比,联接、选择、投影等运算时间均可忽略不计。完成T1表达式的运算的时间大约需要3775分钟,即62小时。
  对T3而言,先对S文件作SNAME=”王平”的选择操作,读块数目为B1;然后把结果与S_C作连接、投影运算,读块数目为B2,所以总的读块数目为B1 B2=3000,由于满足条件的元组很少(大约50个元组),不用保存中间结果文件,因而完成T3表达式共需约2.5分钟(一秒钟仍读20块),仅等于前者的一千五百分之一。当文件的存贮块数更多且存在关于SNAME的倒排索引时,两者的时间差别将更为显著。
  对于一个运算表达式,能否找出一个与之等价且操作时间更少的表达式呢?这正是查询优化所要研究的问题。



相关文章


数据库系统2-6:关系运算的等价性
C教程-----数据类型、变量和运算符(2)
数据库系统2-7:查询实例相关
Access与Office其他成员轻松交流数据
C教程-----数据类型、变量和运算符(1)
数据库系统2-5:元组关系演算
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛