【数据库系统】查询语句性能优化

12 篇文章 0 订阅

第五章 查询处理和查询优化

  • 基本内容
  • DBMS查询处理步骤;优化查询概念;基本方法和技术

  • 查询步骤,类似于编译原理中高级语言的编译过程
  • 基于关系代数内容

    • 查询分析
    • 词法分析,语法分析,语义分析

    • 查询检查
    • 安全性、完整性、有效性检查

    • 建立查询内部表示(语法树)
    • 查询优化
    • 查询执行
  • 选择操作实现
    • 顺序扫描法
    • 简单按照关系中元组的物理位置顺序扫描,选择出满足条件的元组,平均搜索代价: 总行数/2

    • 二分查找法
    • 选择条件是p = ‘’,选择的属性是有序且以此属性值相等比较,适合使用二分查找法,平均搜索代价: log(总行数)

      • 如果选择是作用在非有序属性上,那么代价也会增加
    • 索引查找法
    • 常见有B+树索引和Hash索引

    • 复合选择,逻辑合取,∩
    • 选择条件p AND q。使用多个索引,在多个属性上建立索引,然后分别查找,取交集

    • 复合选择,逻辑析取,∪
    • 选择条件p OR q。若两个条件作用属性都有索引可以优化,取并集,否则只能顺序扫描法

  • 连接操作实现,
  • 连接操作是数据库操作中最复杂的,最坏情况是笛卡尔积

    • 嵌套循环法
    • 最基础的方法

    • 索引嵌套循环法
    • 利用索引减少查找时间,从而减少循环次数

    • 排序合并法
    • 对两个表连接属性进行排序,采用两个指针,指针一不动,指针二向下扫描,扫描到相同的元素进行连接,扫描到不同的元素,指针二下移。 两个表都只用扫描一次

    • 散列连接法
    • 将两个表的连接属性分别散列到一个Hash数组中,然后对散列到同一位置的元素进行连接

  • 投影操作实现
  • 如果投影列包含主键,直接投影,否则需要进行消除重复的操作

  • 查询优化, @面试
    • 特点
      • 优化器可以从数据字典中获取统计信息,程序员编程时则不能使用
      • 如果数据库物理结构变化了,那么DBMS可以自动重新优化
    • 代数优化
    • 基于关系代数对查询语句进行优化,不涉及底层的存储

      • 策略
        • 尽早执行选择操作, 减少中间关系,在语法树中,选择操作移动到叶端
        • 投影操作和选择操作同时做, 避免重复扫描
        • 将投影操作与前后的双目运算符结合, 减少扫描关系的遍数
        • 选择和笛卡尔积结合成自然连接
        • 执行连接操作前,可以对连接属性进行排序或者建立索引
        • 找出公共子表达式
    • 基于存储路径优化
    • 合理选择各种操作的存储路径,涉及底层物理存储实现

      • 选择操作启发式规则,
        • 对于小关系,直接使用顺序扫描法
        • 对于大关系
          • 条件是“主键=值”,由于选择元组少,使用主键索引
          • 条件是AND合取,优先使用组合索引法
          • 条件是OR析取,一般使用全表扫描法
          • 其余,根据选择元组百分比,若较多使用顺序扫描法,否则使用主键索引
      • 连接操作启发式规则,
      • 和连接操作实现一样,有排序合并、索引连接、Hash连接法

    • 基于代价评估优化
    • 访问存储器代价、存储代价、计算代价、内存使用代价、通信代价

      • 数据字典中记录的统计信息
        • 元组总数、元组长度、占用块数、占用溢出块数

        • 列不同值的个数、选择率、最值、索引类型

        • 索引
        • 索引层数、不同索引值个数、叶节点个数

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小子挺不错

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值