• 注册
  • Web开发 Web开发 关注:10 内容:6

    SQL优化极简法则

  • 查看作者
  • 打赏作者
  • 当前位置: F12开发者 > Web开发 > 正文
    • Web开发
    • Lv.3

      SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。

      查询优化是一个复杂的工程,涉及从硬件到参数配置、不同数据库的解析器、优化器实现、SQL 语句的执行顺序、索引以及统计信息的采集等,甚至应用程序和系统的整体架构。

      本文介绍几个关键法则,可以帮助我们编写高效的 SQL 查询;尤其是对于初学者而言,这些法则至少可以避免我们写出性能很差的查询语句。

        法则一:只返回需要的结果

      (1)避免使用
      SELECT * FROM

        法则二:确保查询使用了正确的索引

      (1)经常出现在
      WHERE 条件中的字段建立索引 -> 避免全表扫描

      (2)将
      ORDER BY 排序的字段加入到索引中 -> 避免额外的排序操作

      (3)多表连接查询的关联字段建立索引 -> 提高连接查询的性能

      (4)将
      GROUP BY 分组操作字段加入到索引中 -> 利用索引完成分组

      索引失效:


      WHERE 子句中对索引字段进行表达式运算或者使用函数都会导致索引失效,还包括字段的数据类型不匹配,例如字符串和整数进行比较

      使用
      LIKE 匹配时,如果通配符出现在左侧无法使用索引

      如果
      WHERE 条件中的字段上创建了索引,尽量设置为 NOT NULL
      ;不是所有数据库使用 IS [NOT] NULL
      判断时都可以利用索引

      EXPLAIN:

      如果 SQL 语句性能不够理想,我们首先应该查看它的执行计划,通过执行计划(EXPLAIN)确保查询使用了正确的索引

        法则三:尽量避免使用子查询,考虑使用
      JOIN 进行重写

        法则四:不要使用 OFFSET 实现分页(实用~)

      分页查询的原理就是先跳过指定的行数,再返回 Top-N 记录。

      SQL优化极简法则

        法则五:了解 SQL 子句的逻辑执行顺序

      (6)SELECT [DISTINCT | ALL] col1, col2, agg_func(col3) AS alias(1) FROM t1
      JOIN t2(2) ON (join_conditions)(3) WHERE where_conditions(4) GROUP BY col1,
      col2(5)HAVING having_condition(7) UNION [ALL] ...(8) ORDER BY col1 ASC,col2
      DESC(9)OFFSET m ROWS FETCH NEXT num_rows ROWS ONLY;

      总结

      SQL 优化本质上是了解优化器的的工作原理,并且为此创建合适的索引和正确的语句;同时,当优化器不够智能的时候,手动让它智能。

        来源: 链接

      请登录之后再进行评论

      登录
    • 发表内容
    • 实时动态
    • 偏好设置
    • 帖子间隔 侧栏位置: