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 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。

  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/grow001/p/12116478.html
Copyright © 2011-2022 走看看