关系系统的查询优化既是关系数据库管理系统实现的关键技术,又是关系系统的优点所在。用户只要提出“干什么”,而不必指出“怎么干”。
在非关系系统中,用户必须了解存取路径,系统提供用户选择存取路径的手段,查询的效率由用户的存取策略决定,且系统是无法加以优化的。这就要求用户需要具有较高的数据库技术和程序设计水平
查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较高的效率,而且在于系统可以比用户程序的“优化”做得更好。这是因为:
目前关系数据库管理系统通过某种代价模型计算出各种查询执行策略的执行代价,然后选取代价最小的执行方案。一般来说:总代价=I/O代价+CPU代价+内存代价+通信代价
可以通过“求选修了2号课程的学生姓名”这样一个例子来说明为什么要进行查询优化
以下是一些系统假设
SELECTStudent.nameFROMStudent,SCWHEREStudent.Sno=SC.SnoANDSC.Cno='2';系统可以用多种等价的关系代数表达式来完成这一查询,这里只举三种情况
Student与Sc作笛卡尔积,而后作行选择运算(选择条件为Student.Sno=SC.SnoANDSC.Cno='2'),最后进行投影操作
操作:
块数:
情况1读取总块数:
4100(读)+$10^{6}$(写)+$10^{6}$(读)。约为200万块
Student与Sc作自然连接,而后作行选择运算(选择条件为Student.Sno=SC.SnoANDSC.Cno='2'),最后进行投影操作
情况2读取总块数:
4100(读)+$1000$(写)+$1000$(读)。共计6100块
首先Sc作行选择(选择条件为SC.Cno='2'),而后作自然连接运算,最后进行投影操作
情况3读取总块数:
100(读)+200(读)。共计300块
通过上面的那个例子可以看到:经过优化,磁盘I/O涉及块数从200万下降至300,效率提升显著,这说明查询优化是非常有必要的。上述三种情况其有些操作是可以优化的,例如
因此,由情况1到情况2再到情况3这样的优化称之为代数优化;而如果对底层路径或算法进行优化则称之为物理优化。例如对于情况三,可以添加索引,继续减小代价