美文网首页
第五弹:MySQL查询和调优

第五弹:MySQL查询和调优

作者: lvyz0207 | 来源:发表于2020-06-14 15:06 被阅读0次

    SQL查询顺序

    (7)     SELECT   
    (8)     DISTINCT <select_list>  
    (1)     FROM <left_table>  
    (3)     <join_type> JOIN <right_table>  
    (2)     ON <join_condition>  
    (4)     WHERE <where_condition>  
    (5)     GROUP BY <group_by_list>  
    (6)     HAVING <having_condition>  
    (9)     ORDER BY <order_by_condition>  
    (10)    LIMIT <limit_number>
    
    1.为用户创建、分配处理线程。
    2.登录验证
    3.资源初始化
    4.词法语法分析
    5.权限校验
    6.执行优化器
    7.执行器生成执行计划,同时生成全日志、slow慢日志、binlog日志。
    8.通过api操作存储引擎。
    
    
    ### 执行路径
    1. 客户端发送一条查询给服务器;
    2. 服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段;
    3. 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划;
    4. MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;
    5. 将结果返回给客户端
    

    调优

    数据库调优是个复杂的过程:
    主要包括以下几个方面:表结构索引和SQL优化服务器端优化存储引擎优化

    表结构索引优化、查看慢日志、explain查看执行计划、SQL语句优化

    优化慢查询SQL:

    1. 根据慢日志定位慢SQL
    2. 使用explain分析SQL
    3. 修改SQL或者尽量走索引

    查询慢日志:

    1. show variables like '%quer%';
    2. show status like '%slow_queries%'; # 查询慢请求状态
    3. set global slow_query_log = on; # 打开慢查询日志
    4. set global long_query_time = 1; # 设置超时时间

    explain + 查询SQL;

    关键字:type:
    如果为index 和all 表示为全表扫描  
    
    关键字:extra:
    如果为using filesort 和 using temporary 表示无法使用索引
    
    加索引:
    alter table 表名 add index idx_name(列名);
    
    调优金字塔

    设计原则:

    - 查询语句无论是使用哪种判断条件 等于、小于、大于, WHERE 左侧的条件查询字段不要使用函数或者表达式
    - 使用 EXPLAIN 命令优化你的 SELECT 查询,对于复杂、效率低的 sql 语句,我们通常是使用 explain sql 
      来分析这条 sql 语句,这样方便我们分析,进行优化。
    - 当你的 SELECT 查询语句只需要使用一条记录时,要使用 LIMIT 1
    - 不要直接使用 SELECT *,而应该使用具体需要查询的表字段,因为使用 EXPLAIN 进行分析时,
       SELECT * 使用的是全表扫描,也就是 type = all。
    - 为每一张表设置一个 ID 属性
    - 避免在 WHERE 字句中对字段进行 NULL 判断
    - 避免在 WHERE 中使用 != 或 <> 操作符
    - 使用 BETWEEN AND 替代 IN
    - 为搜索字段创建索引
    - 选择正确的存储引擎,InnoDB 、MyISAM 、MEMORY 等
    - 使用 LIKE %abc% 不会走索引,而使用 LIKE abc% 会走索引
    - 对于枚举类型的字段(即有固定罗列值的字段),建议使用ENUM而不是VARCHAR,如性别、星期、类型、类别等
    - 拆分大的 DELETE 或 INSERT 语句
    - 选择合适的字段类型,选择标准是 尽可能小、尽可能定长、尽可能使用整数。
    - 字段设计尽可能使用 NOT NULL
    

    MySQL参数优化

    硬件及系统配置

    Book_Love

    相关文章

      网友评论

          本文标题:第五弹:MySQL查询和调优

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