如果突然交给你一个你完全不清楚的数据库让你进行优化,可能我们需要对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.根据分析得出的问题解决效率低下问题:
  通过上述几步可以得出问题所在,比如进行全表扫描,那么我们可以通过建立索引提高效率