在DBA或者用户执行SQL时候,首先会经过编译器编译,而编译的过程就就行了物理优化和逻辑优化,最终形成执行计划。
知识-关系代数
逻辑优化的基础是关系代数,关系代数的操作有 1、基本操作 并、差、笛卡尔积、选择、投影、连接。2、扩展操作 交、 θ连接(等值连接 、自然连接)3、扩展复杂操作 除 左外连接 右外连接 全外连接
除操作适合描述这样的语义:sc(学生选课表) s# c# score Course(课程表) c# cname ccredit 求选修了全部课程的学生学号。 Pc#,s#(sc) ➗ Pc#(course) 其中P 代表投影。
关系代数的书写思路:
除操作说明
逻辑优化
物理优化主要涉及到的是基本关系代数操作的次序问题。比如尽可能的将选择和投影操作提前。
逻辑层优化策略
主要有 1、尽可能的将选择操作和投影操作提前。2、将一元操作串接恰里减少关系表的扫描次数。3、将乘积操作后的选择操作与其结合起来作为连接操作,减少中间结果,以及扫描表的次数。
物理优化
物理查询优化主要是依据代价估算对关系代数操作选择合适的算法和执行次序。 所以说基本关系代数操作次序优化 和代价估算和为基本关系代数选择合适的算法是DBMS 的核心技术。
为什么要进行物理优化?
物理查询优化主要是对确定的关系代数表达式的基本操作选择合适的执行方案。衡量指标就是 执行方案所需的I/O次数以及cpu时间等等,那么是如何估算出这些值的呢?主要是根据数据库运行期间的统计信息,一般放在系统目录中或者叫数据字典中。常见的统计信息有表的元组数,磁盘块数,每个磁盘块的字节数等等。
当我们某个表只有几百条数据时,可能使用全表扫描的算法比索引算法更快,当数据量达到几十万条时候如果统计信息不更新,那么就会导致物理查询优化的选择错误。DBA应该对于经常更新的表做统计信息的更新。
物理查询计划理想情况下是寻找最优的查询计划,现实情况是避免最差的查询计划。