美文网首页
SQL进阶教程之1.11 让SQL飞起来

SQL进阶教程之1.11 让SQL飞起来

作者: anti酱 | 来源:发表于2021-11-27 15:05 被阅读0次

技巧1:使用高效的查询
原因:
1 使用连接列建立索引,查询时只需要查询索引不需要查询另一个表
2 查到满足条件的行就会终止查询,不会像 in一样扫描全表

  • 当用到子查询时,最好是用 exists而不是 in
  • 大多数时候not exists 和 not in查询结果相同,但exists用于子查询结果更快
表classes_a 表classes_b

查询方法1:使用in子句

查询方法2:使用exists语句(推荐)

技巧2:避免排序
原因:当内存不足,需要在硬盘上排序时,对数据库性能影响很大,因此要避免排序

  • 涉及到排序的语句

    • group by子句
    • order by子句
    • 聚合函数
    • distinct
    • 集合运算符(union/intersect/except)
    • 窗口函数(rank/row_number)
  • 尽量使用union/intersect/except all 而非union/intersect/except,因为后者会根据排序筛选信息

  • distinct也需要进行排序来去重,因此尽量用exists代替distinct

  • 在极值函数max()/min()函数中使用索引而不是字段,仅扫描索引而非全表

  • 能写在where里的条件不要写在having子句里

    • where可以筛选出一部分行而不用选择全部数据
    • having子句是根据聚合后的结果排序,不能继承原表的索引结构

技巧3:索引
原因:当使用索引查询时,不需要扫描全表,只需要查找索引即可,可大大提升效率

  • 当索引出现在条件表达式中,左侧应该是原始字段而非原始字段+运算

  • 通常索引字段不存在null,使用null和is null 会使索引无法使用

  • 使用否定形式not in/<>/!=也无法使用索引

  • 建立联合索引时,使用or的效率要比and更低

  • 联合索引时,字段的顺序与原表中顺序一致(如列A and 列B and 列C,顺序与原来的顺序一致)

  • 使用like谓词时,只有前方一致即'x%'才能匹配到索引

  • 需要进行类型转换时显示类型转换,如cast(值,as char(2))

技巧4:减少中间表
原因:1 中间表耗费内存资源 2 中间表索引不容易用到,因此需要尽量减少

  • 尽量在group by语句后直接使用having筛选,而不是group by结果作为子句+where筛选
  • 需要对多个字段使用in时,把他们汇总到一列,如 where 列a in(select.... from) + where 列b in(select.... from)= where a||b in (select a||b ...)
  • 先进行连接在进行聚合
  • 合理使用视图,特别避免在视图中使用聚合函数和聚合运算符

相关文章

  • SQL进阶教程之1.11 让SQL飞起来

    技巧1:使用高效的查询原因:1 使用连接列建立索引,查询时只需要查询索引不需要查询另一个表2 查到满足条件的行就会...

  • 0.SQL编程之目录

    SQL编程之前言为什么我选择分享SQL编程SQL编程的基础概念 SQL编程之MySQL 自定义函数 Hello w...

  • SQL进阶教程之1.12 sql编程方法

    本节主要介绍了统一的编程标准,以优化代码,增加可读性。 表的设计 列、表、索引绝对不要使用如A/AA/a123这样...

  • 让SQL飞起来

    使用高效的查询 参数是子查询时,使用EXISTS代替IN如果连接列上建立了索引,只需查询索引即可;如果使用exis...

  • SQL进阶教程之1.9 用sql处理数列

    用法1:生成连续序号案例1:生成从0-99的连续序号知识点:00-99中0-9各自出现了20次,出现在个位和十位上...

  • SQL进阶教程之1.8谓词

    谓词 是一种特殊函数,返回布尔值true/false/ 分为全称量词和存在量词全称量词:所有x都满足条件P存在量词...

  • JDBC编程目录

    JDBC编程目录 SQL基础JDBC基础JDBC进阶

  • sql注入风险

    SQL注入攻防入门详解 如何从根本上防止 SQL 注入 教您使用参数化SQL语句 参数化查询为什么能够防止SQL注...

  • Ⅱ.sql进阶

    1.SELECT TOP 规定返回记录数目 2.like 在 WHERE 子句中搜索列中的指定模式 3.通配符 4...

  • SQL进阶教程之1.2自连接

    自连接用法 排列组合(重复排列/不重复排列/组合) 删除重复项 查找局部不一致的列 排序 用法1:可重排列应用场景...

网友评论

      本文标题:SQL进阶教程之1.11 让SQL飞起来

      本文链接:https://www.haomeiwen.com/subject/fstqxrtx.html