数据库概论 (六)查询及优化
2021-01-14 17:35
746 查看
关系系统以及查询优化
查询检查
执行查询语句之前需要执行一些查询检查任务,提高代码的健壮性。
- 有效性检查,查询的属性,数据表,是否存在,关系名是否有效
- 视图转换,将视图转换为基本表的查询
检查完成之后会将数据库语句转换为对应的语法树。
查询算法优化
选择操作的实现算法
选择操作有多种实现方式,例如全表扫描法,索引法,散列法等等。
- 全表扫描法比较适合体较小的表,扫描起来代价不会太高,或者是对于那些要选取表中大部分元素的查询操作,全表扫描要比使用索引和散列更加廉价,因为没有查询或者计算散列下标的代价。
- 索引法或者是散列法,适合选择查询的属性列上有有索引,先通过索引找到对应的元组的主码,或者是通过hash散列函数算出元组的主码,再去取得数据。
连接操作的实现算法
select * from student, sc where student.sno=sc.sno
实现上述两个表的连接通常有这么几个办法:
- 嵌套循环法 nested-loop
- 排序合并法 sort-merge
- 索引连接法 index-join
嵌套循环法
类似于里外双循环,将student表中的元组取出,将其Sno属性与sc中的所有元组的Sno属性进行对比,如果相等就进行连接,然后将连接的结果加入到结果集中,所以这里的代价为两表的大小之积:O(MN)。
排序合并法
适合连接的诸表已经排好序的情况 排序-合并连接方法的步骤:
- 如果连接的表没有排好序,先对Student表和SC表按连接属性Sno排序;
- 取Student表中第一个Sno,依次扫描SC表中具有相同Sno的元组;
- 当扫描到Sno不相同的第一个SC元组时,返回Student表扫描它的下一个元组,再扫描SC表中具有相同Sno的元组,把它们连接起来;
- 重复上述步骤直到 Student 表扫描完
索引连接法
- 在SC表上建立属性Sno的索引,如果原来没有该索引;
- 对Student中每一个元组,由Sno值通过SC的索引查找相应的SC元组
- 把这些SC元组和Student元组连接起来, 循环执行2,3,直到Student表中的元组处理完为止
相关文章推荐
- 【数据库系统概论】-关系查询处理和查询优化
- 数据库查询的优化
- Oracle查询性能优化(面试题:数据库查询优化也是常问的问题)
- 基于索引的数据库查询优化
- 优化SQL查询:如何写出高性能SQL语句1、首先要搞明白什么叫执行计划?执行计划是数据库根据SQL
- 数据库查询优化原则,欢迎指正补充
- 数据库的查询优化技术
- 数据库查询优化
- 如何优化数据库中数据的查询
- [SQL]数据库查询优化
- 数据库查询处理和优化
- 数据库查询优化方案
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
- 数据库查询优化
- 数据库查询优化
- 数据库查询优化
- 【转】数据库查询优化原则
- 基础数据库查询优化
- php处理上百万条的数据库如何提高处理查询速度(小白数据库优化)
- 数据库查询优化(使用union 和 union all 的区别)