• 注册
  • 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 优化本质上是了解优化器的的工作原理,并且为此创建合适的索引和正确的语句;同时,当优化器不够智能的时候,手动让它智能。

      来源:https://tonydong.blog.csdn.net/article/details/105695431

    请登录之后再进行评论

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