下面是数据库MySQL优化的一些步骤

一、通过show status和应用特点了解各种SQL的执行频率

通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extended-status命令获得。SHOW STATUS可以根据需要显示session级别的统计结果和global级别的统计结果。

以下几个参数对Myisam和Innodb存储引擎都计数:

1.Com_select  执行select操作的次数,一次查询只累加1;

2.Com_insert 执行insert操作的次数,对于批量插入的insert操作,只累加一次;

3.Com_update 执行update操作的次数;

4.Com_delete 执行delete操作的次数;



以下几个参数是针对Innodb存储引擎计数的,累加的算法也略有不同:

1.       Innodb_rows_read select查询返回的行数;

2.       Innodb_rows_inserted执行Insert操作插入的行数;

3.       Innodb_rows_updated 执行update操作更新的行数;

4.       Innodb_rows_deleted 执行delete操作删除的行数;

通过以上几个参数,可以很容易的了解当前数据库的应用是以插入更新为主还是以查询操作为主,以及各种类型的SQL大致的执行比例是多少。对于更新操作的计数,是对执行次数的计数,不论提交还是回滚都会累加。

对于事务型的应用,通过Com_commit和Com_rollback可以了解事务提交和回滚的情况,对于回滚操作非常频繁的数据库,可能意味着应用编写存在问题。

此外,以下几个参数便于我们了解数据库的基本情况:

1.Connections 试图连接Mysql服务器的次数

2.Uptime    服务器工作时间

3.Slow_queries 慢查询的次数

二、定位执行效率较低的SQL语句

可以通过以下两种方式定位执行效率较低的SQL语句:

1.可以通过慢查询日志定位那些执行效率较低的sql语句,用–log-slow-queries[=file_name]选项启动时,mysqld写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文件。可以链接到管理维护中的相关章节。

2.慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态,是否锁表等等,可以实时的查看SQL执行情况,同时对一些锁表操作进行优化。

三、通过EXPLAIN分析低效SQL的执行计划

通过以上步骤查询到效率低的SQL后,我们可以通过explain或者desc 获取MySQL如何执行SELECT语句的信息,包括select语句执行过程表如何连接和连接的次序。

explain可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。

 

mysql> explain select sum(moneys) from sales a,companys b where a.company_id = b.id and a.year = 2006;

+—————-+———-+———–+—————-+—————-+———-+———–+—————-+

| select_type   | table | type  | possible_keys| key            | key_len   | rows  | Extra     |

+—————-+———-+———–+—————-+—————-+———-+———–+—————-+

| SIMPLE    | b     | index | PRIMARY   | PRIMARY   | 4     |    1  | Using index   |

| SIMPLE    | a     | ALL   | NULL      | NULL      | NULL  |   12  | Using where   |

+—————-+———-+———–+—————-+—————-+———-+———–+—————-+

2 rows in set (0.02 sec)

 

select_type:select 类型

table:输出结果集的表

type:表示表的连接类型

①当表中仅有一行是type的值为system是最佳的连接类型;

②当select操作中使用索引进行表连接时type的值为ref;

③当select的表连接没有使用索引时,经常会看到type的值为ALL,表示对该表进行了全表扫描,这时需要考虑通过创建索引来提高表连接的效率。

possible_keys:表示查询时,可以使用的索引列.

key:表示使用的索引

key_len:索引长度

rows:扫描范围

Extra:执行情况的说明和描述

 

四、确定问题,并采取相应的优化措施

经过以上步骤,基本可以确认问题出现的原因,可以根据情况采取相应的措施,进行优化提高执行的效率。

例如上面的例子,我们确认是对a表的全表扫描导致效率的不理想,我们对a表的year字段创建了索引,查询需要扫描的行数明显较少。

 

mysql> explain select sum(moneys) from sales a,companys b where a.company_id = b.id and a.year = 2006;

+—————-+———-+———–+—————-+—————-+———-+———–+—————-+

| select_type   | table | type  | possible_keys| key            | key_len   | rows  | Extra     |

+—————-+———-+———–+—————-+—————-+———-+———–+—————-+

| SIMPLE    | b     | index | PRIMARY   | PRIMARY   | 4     |    1  | Using index   |

| SIMPLE    | a     | ref       | year      | year      | 4     |    3  | Using where   |

+—————-+———-+———–+—————-+—————-+———-+———–+—————-+

2 rows in set (0.02 sec)

转载自:http://www.jfox.info/shu-ju-ku-MySQL-you-hua-de-yi-xie-bu-zhou

mysql管理----状态参数释义的更多相关文章

  1. MySQL进程-状态等参数详解

    查看连接 mysql -uroot -p123456 -e "show processlist;" 查看正在执行的sql语句 mysql -uroot -p123456 -e &q ...

  2. MYSQL管理之主从同步管理

    原文地址:MYSQL管理之主从同步管理 作者:飞鸿无痕 MYSQL管理之主从同步管理 MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重 ...

  3. MYSQL管理之主从同步管理 转载

    MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要,新手往往在出现主从同步错误的时候不知道如何入手,这篇文章就是根据自己的经验来详细叙 ...

  4. 涂抹mysql笔记-mysql管理工具

    五花八门的mysql管理工具<>mysql提供的命令行工具 mysql_install_db:mysql建库工具,在源码安装mysql环节我们使用过. mysql_safe:mysql启动 ...

  5. MySQL管理之道:性能调优、高可用与监控》迷你书

    MySQL管理之道:性能调优.高可用与监控>迷你书 MYSQL5.5.X主要改进 1.默认使用innodb存储引擎2.充分利用CPU多核处理能力3.提高刷写脏页数量和合并插入数量,改善I/O4. ...

  6. MySQL 各种超时参数的含义

    MySQL 各种超时参数的含义 今日在查看锁超时的设置时,看到show variables like '%timeout%';语句输出结果中的十几种超时参数时突然想整理一下,不知道大家有没有想过,这么 ...

  7. 使用mysql管理meta

    第一部分 安装mysql 第二部分 使用mysql管理meta 安装mysql 安装 yum -y install mysql mysql-server yum方法安装需要使用网络:可以自动续传:对于 ...

  8. mysql命令行参数(转)

    MySQL命令行参数 Usage: mysql [OPTIONS] [database] //命令方式  -?, --help //显示帮助信息并退出  -I, --help //显示帮助信息并退出  ...

  9. mysql 命令行参数

    MySQL命令行参数 Usage: mysql [OPTIONS] [database] //命令方式  例如: mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAM ...

随机推荐

  1. Ant 参考

    http://ant.apache.org/manual/Tasks/exec.html Exec Description Executes a system command. When the os ...

  2. Sea Battle

    Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  3. iOS 判断数组不为空

    if (array != nil && ![array isKindOfClass:[NSNull class]] && array.count != 0)

  4. java开发地三天——数据库介绍

    又是一天萌萌哒地过去了,今天是处理数据库的部分.SQL Server 2008,这东西是上学期搞MFC的时候接触到的,那时候话说安装就是一个大问题,然后在学SQL语句的时候感觉还好,一切都还过得去.现 ...

  5. JSP内置对象--application对象(getRealPath(),getAttributeNames(),getContextPath())

    application对象是javax.servlet.ServletContext接口的实例化对象.是整个servlet的上下文,代表了整个web容器的操作. 常用方法: 1.java.lang.S ...

  6. Android开发之如何保证Service不被杀掉(broadcast+system/app)

    序言 最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作,都要保证service不被kill,这可真是一个难题.参考了现今各种定制版的系统和安全厂商牛虻 ...

  7. mob分享

    QQ分享时候 QQ和QQ控件的appid   是一样的  都是在QQ开发者那里申请 powered by ShareSDK怎么去掉? android:参考sdk说明文档,继承一个AuthorizeAd ...

  8. ztree异步加载

    Ztree异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载. 直接贴代码(SpringMvc+Mybatis): 前台页面ztreeList.jsp: ...

  9. C++异常机制的实现方式和开销分析

    C++异常机制的实现方式和开销分析 白杨 http://baiy.cn http://baiy.cn/doc/cpp/inside_exception.htm 在我几年前开始写<C++编码规范与 ...

  10. 某技术大牛的帖子(android项目总结)

    1. 一般性控件需要设置onclick事件才会有点击效果(selector). 2.  <item android:drawable=”@drawable/btn_ct_green” /> ...