zoukankan      html  css  js  c++  java
  • mysql优化sql语句的思路浅谈

    如果突然交给你一个你完全不清楚的数据库让你进行优化,可能我们需要对sql语句进行优化,我们需要又怎么样的思路:

    1.首先我们要了解一下次库是以写为主还是读为主:

    通过show [session|global] status like '%Com_%'查询当前数据库的状态,session是当前连接的,global是自从上次数据库启动后的。默认不写是session

    | Com_select     | 2     |

    | Com_insert     | 0     |

    | Com_update   | 0     |

    | Com_delete    | 0     |

    后面表示累加的执行次数,所有的存储引擎都可以进行累加

    show [session|global] status like '%Innodb_rows_%'

    +----------------------+-------+
    | Variable_name | Value |
    +----------------------+-------+
    | Innodb_rows_deleted | 0 |
    | Innodb_rows_inserted | 7 |
    | Innodb_rows_read | 6 |
    | Innodb_rows_updated | 0 |
    +----------------------+-------+

    这个是只针对innodb引擎的。

    通过上述结果我们就能大致知道该库是读为主还是写为主了,更新操作的commit和rollback计数都会加1

    Com_commit和Com_rollback中,后者很频繁可能是应用有问题

    2.其次我们要定位效率低的sql语句,可以用以下两种方式进行:

    (1)通过慢查询日志:5.6中是slow_query_log_file中查看,缺点是:这个是只有在查询结束后彩记录,所以在应用向你反映效率问题时慢查询日志并不能及时反馈,也许执行的语句还没写进去。

    (2)针对上面问题,可以用 show processlist命令查看MySQL进行的线程,包括状态、是否锁表等。可以实时查看SQL执行情况,同时对一些锁表操作进行优化

    3.通过explain分析效率低下的 sql执行计划:

    当通过上述方式找到效率不高的sql语句后,通过explain或者desc可以分析效率低下的sql的执行计划

    4.根据分析得出的问题解决效率低下问题:

    通过上述几步就可以得出问题所在,比如进行全表扫描,那么我们可以通过建立索引提高效率

    你将来想成为什么样子,就一定会成为什么样子,只要你努力坚持的去做!!!
  • 相关阅读:
    SGU 242. Student's Morning( 网络流 )
    8.23单词
    bzoj1083:繁忙的城市
    求连通分量
    bzoj2761:不重复数字
    bzoj1207:打鼹鼠
    bzoj2748:音量调节
    bzoj1050:旅行comf
    bzoj1996:合唱队
    羞耻羞耻羞耻!!!
  • 原文地址:https://www.cnblogs.com/kucha/p/4838062.html
Copyright © 2011-2022 走看看