• MySQL优化(1)


    必要性:业务的增加,各公司的数据不在仅仅的功能实现方面,更多的是对数据的优化问题。

    1.定位低效率sql

    慢查询日志 : 通过慢查询日志定位那些执行效率较低的 SQL 语句,用--log-slow-queries[=file_name]选项启
    动时,mysqld 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件。
    show processlist : 慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询 日志并不能定位问题,
    可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态、是否 锁表等,可以实时地查看 SQL 的执行情况,同时对一些锁表操作进行优化。

    2 explain分析执行计划 

    通过以上步骤查询到效率低的 SQL 语句后,可以通过 EXPLAIN或者 DESC命令获取 MySQL如何执行 SELECT 语句 的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序

    展示如下:

     详细讲解explain的各个属性的用意。

    id 字段是 select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺序。id 情况有三种 

    1) id 相同表示加载表的顺序是从上到下。
    
    2) id 不同id值越大,优先级越高,越先被执行。
    
    3) id 有相同,也有不同,同时存在。id相同的可以认为是一组,从上往下顺序执行;在所有的组中,id的值越 大,优先级越高,越先执行。

     explain 之 select_type 

    explain 之 type

    type 显示的是访问类型,是较为重要的一个指标,其结果的好坏等级:
    NULL > system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
    
    一般使用:
    system > const > eq_ref > ref > range > index > ALL
    
    一般来说, 我们需要保证查询至少达到 range 级别, 好达到ref  

    3.show profile分析SQL

    Mysql从5.0.37版本开始增加了对 show profiles 和 show profile 语句的支持。show profiles 能够在做SQL优化时 帮助我们了解时间都耗费到哪里去了。
    通过 have_profiling 参数,能够看到当前MySQL是否支持profile。

    使用下面的命令,查看执行的各项耗时

    通过show profile for query query_id 语句可以查看到该SQL执行过程中每个线程的状态和消耗的时间。另外for的前面还可以添加参数,比如cpu,io等

    4 trace分析优化器执行计划

    MySQL5.6提供了对SQL的跟踪trace, 通过trace文件能够进一步了解为什么优化器选择A计划, 而不是选择B计划。

    使用如下命令来检测:select * from information_schema.optimizer_traceG;

  • 相关阅读:
    PHP中new static()与new self()的比较
    【程序员感悟系列】 由一点业务说开去
    配置管理工具 Puppet的安装和使用
    【读书笔记】大话设计模式
    博客还是要写起来 2016.08.13 周六
    linux启动SSH及开机自动启动
    Monkey日志信息的11种Event percentages
    Monkey官方帮助翻译&介绍
    Github问题An error occurred trying to download
    怎样克服拖延症,马上采取行动?
  • 原文地址:https://www.cnblogs.com/topass123/p/12972882.html
Copyright © 2020-2023  润新知