原先数据库没有好好学习,感觉一直是似懂非懂的状态,很多原理也不懂,今天抽时间查阅一些资料自己也总结了一些。
本文数据库索引原理部分主要参考博文:http://www.cnblogs.com/aspwebchh/p/6652855.html ,是一片很优秀的文章,值得一看。
不说废话直接开撸:
关系数据库管理系统查询处理可分为四个阶段:查询分析、查询检查、查询优化和查询执行。
查询分析:
对查询语句进行扫描、词法分析和语法分析,判断查询语句是否符合SQL语法规则。如果没有错误则进行下一步处理,否则报告语句中出现的错误。
查询检查:
对合法的查询语句进行语义检查,注意是检查语句中涉及到的数据库、表对象、关系名、属性等是否存在以及对完整性的检查。如果检查通过则转换成等价的关系代数表达式。
查询优化:
查询优化是指选择一个高效执行的查询策略,一般分为代数优化和物理优化。代数优化是指关系表达式的优化,按照一定的规则通过关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使得查询更高效。物理优化则是指存取路径和底层操作算法的选择。
查询执行:
前面的步骤都是为了这一步。根据优化器得到的执行策略生成查询执行计划,由代码生成器生成执行这个查询计划的语句,然后执行 再 返回结果。
查询树的启发式查询优化:
选择运算尽可能先做;把投影运算和选择运算同时进行;把投影同其前后的双目运算结合起来 ;把某些选择同在他前面要执行的笛卡尔积结合起来称为一个运算;找出公共子表达式。