下面是数据库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. Htttp协议

    我 们在浏览器的地址栏里输入的网站地址叫做URL(UniformResourceLocator,统一资源定位符).就像每家每户都有一个门牌地址一样, 每个网页也都有一个Internet地址.当你在浏览 ...

  2. linux的学习系列 7---管道和过滤器

    有时候,我们可以把两个命令连起来使用,一个命令的输出作为另一个命令的输入,这就叫做管道.为了建立管道,需要在两个命令之间使用竖线(|)连接. 管道是Linux进程之间一种重要的通信机制:除了管道,还有 ...

  3. jquery 控制文本输入的字数

    <textarea maxlength="200" id="remarks" onkeyup="title_len();">&l ...

  4. Provisioning profile 浅析

    转载自:    http://blog.csdn.net/chenyufeng1991/article/details/48976245 一般在我们代码编写中不会用到Provisioning prof ...

  5. AIX创建用户

    -bash-3.2# mkuser test                    创建用户3004-689 User "test" exists.-bash-3.2# finge ...

  6. http://www.iteye.com/job/topic/1133159

    Lucene 的索引体系是一个写独占,读共享的结构,这意味着,我们在使用多线程进行添加索引时,性能并不会得到明显的提升,所以任何时刻只能有一个线程对索引进行写 入操作,而保障这个操作的安全性则是来自于 ...

  7. UVALive 2053 Puzzlestan(深搜+技巧)

    这个题目的深搜形式,我也找出来了,dfs(i,j)表示第i个人选到了第j个物品,但是我却无限RE了,原因是我的viod型深搜太过暴力,我当时定义了一个计数器,来记录并限制递归的层数,发现它已经递归到了 ...

  8. 修改tomcat的get方法的参数长度

    在solr查询中,遇到查询字符串过长,返回错误,在tomcat的conf/server.xml中修改下面的参数即可.加上maxHttpHeaderSize="65536" < ...

  9. jquery 事件注册 与重复事件处理

    <!doctype html><html lang="us"><head><meta charset="utf-8"& ...

  10. python中uuid来生成机器唯一标识

    摘要: 我们可以使用uuid1的后16位来标识一个机器.  # use machine specific uuid, last 16 char will be the same if machine ...