查询处理步骤
查询优化基础
查询优化分类
代数优化/逻辑优化:指关系代数表达式的优化
物理优化:指存取路径和底层操作算法的选择
一般不做处理物理优化,风险太高。
优化的依据:
基于规则(rule based)
基于代价(cost based)
基于语义(semantic based): 针对用户不合理的查询等,直接pass,不处理。
实现查询操作的算法示例
选择操作
选择操作典型实现方法:
- 全表扫描方法 (Table Scan)
时间复杂度:O(M)
顺序扫描,逐一检查
适合小表,不适合大表 - 索引扫描方法 (Index Scan)
时间复杂度:O(3)
适合于选择条件中的属性上有索引(例如B+树索引或Hash索引)
过程: 通过索引先找到满足条件的元组主码或元组指针,再通过元组指针直接在查询的基本表中找到元组
(等值)连接操作
连接操作是查询处理中最耗时的操作之一
等值连接最常用的实现算法
- 嵌套循环算法(nested loop join)
步骤:
- 对外层循环(Student表)的每一个元组(s),检索内层循环(SC表)中的每一个元组(sc)
- 检查这两个元组在连接属性(Sno)上是否相等
- 如果满足连接条件,则串接后作为结果输出,直到外层循环表中的元组处理完为止。
时间复杂度:O(M×N)
-
排序-合并算法(sort-merge join 或merge join)
先对两C表按连接属性排序
时间复杂度:O(M+N) 排序复杂度不算 -
索引连接(index join)算法
-
Hash Join算法
标签:复杂度,查询处理,元组,索引,算法,查询,优化,连接 来源: https://www.cnblogs.com/kingwz/p/16189596.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。