zoukankan      html  css  js  c++  java
  • SQL语句常见优化方法

    Sql优化方法

    • 先进行选择运算(where limit)再进行连接运算
    • where子句中应把过滤性最强的条件放在最前面
    • where子句中字段的顺序应和组合索引中字段顺序一致
    • 使用索引
    • 使用覆盖索引来避免表查询
    • 对于重复的计算和相同的子查询考虑使用表变量或临时表保存
    • 尽量不要在列上进行运算或使用函数
    • 借助执行计划分析sql

    查看sql执行计划

    在查询语句前使用EXPLAIN关键字

    变体: EXPLAIN EXTENDED SELECT …… SHOW WARNINGS;(查看优化后的语句)

    常见慢sql

    • 对数据量很大的表做简单查询
    • 多个表连接查询

    简单优化手段

    • 使用索引
    • 分页查询

    连接方式优化

    连接查询介绍

    join (自然连接或等值连接)

    方式一: select * from a join b using();// 两张表有相同的字段

    方式二: select * from a join b on… 同 select * from a , b where…

    不带连接条件会把所有数据读到内存大小为a.count*b.count,使用using的时候用于连接的字段只会显示一列,条件放在on和where里是等价的

    inner join 与join等价

    select * from a inner join b on…

    left join 和right join(左连接、右连接)

    select * from a left join b on…

    on是生成临时表的条件,where是对临时表过滤的条件

    连接查询伪代码

    连接查询优化方法

    • left join 和 inner join选择
    • 筛选条件尽可能写在on子句
    • 嵌套连接优化内层查询,减少join表个数,先join数据量小的表
    • 尽量使用主键或索引字段关联表

    优化例子

    使用IDX_USERID_GOODSNO后耗时0.093s

    使用IDX_USERID_GOODSNO后耗时0.037s

    例子来源于项目数据

  • 相关阅读:
    大数据HIve
    大数据笔记
    [Leetcode]653.Two Sum IV
    [Leetcode]652.Find Duplicate Subtrees
    [Leetcode]650.2 Keys Keyboard
    [Leetcode]648.Replace Words
    [Leetcode Weekly Contest]173
    [总结]最短路径算法
    [Leetcode]647.Palindromic Substrings
    [Leetcode]646.Maximum Length of Pair Chain
  • 原文地址:https://www.cnblogs.com/wangb0402/p/6405517.html
Copyright © 2011-2022 走看看