zoukankan      html  css  js  c++  java
  • MySQL性能优化

    • 性能优化——查看sql执行计划

    EXPLAIN

    MySQL提供了EXPLAIN 命令,他可以对select语句进行分析,并输出select执行的详细信息,以供开发人员针对性优化

    使用EXPLAIN 这个命令来查看这些sql语句执行计划,查看有没有使用索引,有没有做全表扫描,通过explain命令深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。

    用法:

    expain出来的信息有10列,分别是idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra,下面对这些字段进行解释:

    l  id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.

    select_type:表示 SELECT 查询的类型.结果可有:

              SIMPLE, 表示此查询不包含 UNION 查询或子查询

              PRIMARY, 表示此查询是最外层的查询

              UNION, 表示此查询是 UNION 的第二或随后的查询

              DEPENDENT UNION, UNION 中的第二个或后面的查询语句, 取决于外面的查询

              UNION RESULT, UNION 的结果

              SUBQUERY, 子查询中的第一个 SELECT

              DEPENDENT SUBQUERY: 子查询中的第一个 SELECT, 取决于外面的查询. 即子查询依赖于外层查询的结果.

    l  table: 表示查询的是哪个表

    l  partitions: 匹配的分区

    type: join 类型

    l  possible_keys: 此次查询中可能选用的索引

    key: 此次查询中确切使用到的索引.

    ref: 哪个字段或常数与 key 一起被使用

    rows: 显示此查询一共扫描了多少行. 这个是一个估计值.

    l  filtered: 表示此查询条件所过滤的数据的百分比

    l  extra: 额外的信息

    • 性能优化——慢查询

                   数据库查询快慢是影响项目性能的一大因素,对于数据库,我们除了要优化 SQL,更重要的是得先找到需要优化的 SQL

    MySQL 数据库有一个“慢查询日志”功能,用来记录查询时间超过某个设定值的SQL,这将极大程度帮助我们快速定位到症结所在,

    默认是关闭的,需要手动开启

    查看是否开启:

      slow_query_log    :是否开启慢查询日志,ON 为开启,OFF 为关闭,如果为关闭可以开启

    临时开启

    set global slow_query_log = ON;

    set global long_query_time = 1;

    永久开启:设置my.cnf配置文件

    slow_query_log = ON

    slow_query_log_file = /var/log/mysql/slow.log

    long_query_time = 1

    • 性能优化——分析语句Show profile

    Profiler它是MySQL自带的一种诊断分析工具,通过它可以分析出一条sql语句的性能瓶颈在什么地方

    explainslow query log 这两种都无法做到精确分析,但是,query profiler却可以定位出一条sql语句执行的各种资源消耗情况,比如CPU、io等,以及sql执行所消耗的时间等,(只有在MySQL 5.0.37以上版本才可以实现)

    默认是关闭的,需手动开启。

     show profiles :以列表形式显示最近发送到服务器上执行的语句的资源使用情况.显示的记录数由变量:profiling_history_size 控制,默认15条

     show profile: 展示最近一条语句执行的详细资源占用信息,默认显示 Status和Duration两列,可以根据query-ID,选择显示某条记录的性能分析信息。

    profiling控制,默认是OFF关闭状态。

    查看是否开启:select @@profiling;

                            show variables like ‘%profil%’;

    开启:set profiling=1; --1是开启、0是关闭

     正确的使用引擎:

    在 MySQL 中有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊

    MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。

    InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。

  • 相关阅读:
    Windows下使用CMake编译SuiteSparse成VS工程
    【设计模式
    【设计模式
    vue过滤和复杂过滤
    el-tooltip 自定义样式
    el-table加表单验证
    使用Go env命令设置Go的环境
    面试官:GET 和 POST 两种基本请求方法有什么区别?
    解决 Vue 重复点击相同路由报错的问题
    利用promise和装饰器封装一个缓存api请求的装饰器工具
  • 原文地址:https://www.cnblogs.com/grow001/p/12116478.html
Copyright © 2011-2022 走看看