当发现程序运行比较慢的时候,首先排除物力资源问题之后,就将注意力转向mysq数据库:

1、首先确定运行慢的sql语句:

mysql> show full processlist;

2、确认低效的查询:
多次执行第一步发现time耗费大的sql语句。查看耗费的时间。

3、为sql生成一个执行计划query Execution plan(QEP)

mysql> explain select * from tbal_name where ...;

4、查看创建表的语句:

show create table table_name \G;

5、查看表的状态:

show table status like 'table_name' \G;

---------------------------------------------------

总结一些分析的命令:

1、explain:解释sql的执行计划,后边的sql不执行

2、explain partitions :用于查看存在分区的表的执行计划

3、explain extended:--书上说存在filtered列,但是检查后没有发现这一列,待验证

4、show warnings:

5、show create table:查看表的详细的创建语句,便于用户对表进行优化

6、show indexes :产看表的所有索引,show indexes from table_name,同样也可以从information_schema.statistics表中获得同样的信息。cardinality列很重要,表示数据量。

7、show tables status: 查看数据库表的底层大小以及表结构,同样可以从information_schema.tables表中获得底层表的信息。

8、show [global|session]status:可以查看mysql服务器当前内部状态信息。可以帮助却行mysql服务器的负载的各种指标。默认是session。同information_schema.global_status和information_schema.session_status

9、show [global|session] variables :查看当前mysql系统变量的值,其中一些值能影响到sql语句的执行方式。同information_schema.global_variables和information_schema.session_variables;

10、information_schema:包含的表的数量和mysql的版本有关系。

-------------------------

三、索引

1、数据完整性:通过主键和唯一键来确保数据唯一性

主键(primary key):每个表只能有一个,主键不为null,定义了auto_increment列,那么此列就必须是主键的一部分。

唯一键(unique key):表中可以存在多个唯一键,每个key可以为null,即null!=null

2、索引术语:

索引技术:

索引实现:

索引类型:

3、创建单列索引:这里要注意的是可以在一列上创建多个索引,但是这样会产生性能开销,

alter table table_name add primary key|index index_name (coumn_name);

4、当存在多个索引的时候,如何确定选择使用哪个索引更高效?

根据索引中唯一值和索引中总行数做比较,唯一值越多,使用这个索引时以更少读得到查询结果。

禁用优化器设置:set @@session.optimizer_switch='index_merge_intersection=off';

5、在like查询中(%oo)不会走索引

6、不支持函数索引。另外在索引上使用函数,执行计划也不会走索引。

7、唯一索引:提供数据完整性,保证在列中任何值都出现一次,告知优化器,给定的记录最多只有一条结果返回,避免了额外的索引扫描,是否进行了额外的索引扫描,可以使用下边的语句查看:

flush status;

show session status like 'handler_read_next';

select name from student where name='Randy';

show session status like 'handler_read_next';

8、对于结果的排序:如果不是根据索引字段进行排序,mysql会使用内部文件排序算法对返回额行按照指定顺序进行排序。使用索引字段进行排序的话将免去分类的过程。

9、组合索引:索引的执行顺序是按照组合索引中每个字段的cardinality来确定使用哪个组合索引。有的时候交换一下组合索引列的顺序,执行效率会更好。主要可能组合索引的最左列。

组合索引列不要太宽,ref表示使用了那几个组合索引字段,key_len表示索引字段的长度

10、查询提示:

通过查询提示来修改查询的执行计划。

straight_join: 强制按照from后边的关联顺序去执行链接操作,不管执行计划是否是最优的。

11、索引提示:

索引提示都会被链接中的表来使用,为每张表定义use、ignore、force类表

use [index|key] [for( join|order_by|group_by)] [index_list]  --让优化器倾向于使用指定的索引扫描

ignore [index|key] [for( join|order_by|group_by)] [index_list]

force [index|key] [for( join|order_by|group_by)] [index_list] --让优化器倾向于索引扫描而不是全表扫描

12、索引DML操作的影响:影响写操作的性能。重复索引、

13、通过 show index_staistics来查看索引的使用情况,来确定哪些索引没有被使用。没有被使用的索引占用空间,影响写入性能,

14、DDL:在修改表索引的时候会锁表。会影响存储空间的大小。

15、覆盖索引:

16、局部索引:

-----------------

四、搜索引擎

MySIAM:一种非事物行的存储引擎

InnoDB:事务性存储引擎

Memory:基于内存的、非事物性的以及非持久性的存储引擎

查看表的存储引擎:

show create table \show table status \ information_schema.tables可以查看表的存储引擎

【MySql】性能优化之分析命令的更多相关文章

  1. TCMalloc 对MYSQL 性能 优化的分析

    虽然经过研究发现TCMalloc不适合我们现有的游戏框架,但意外收获发现TCMalloc可以大幅度提高MYSQL 性能及内存占用,这里给出配置及测试的结果: 1.配置 关于TCMalloc的安装,在& ...

  2. MySQL性能优化以及常用命令

    1.将查询操作SELECT中WHERE条件后面和排序字段建立索引 2.按需查询,需要哪个字段就查哪个字段,禁止使用"SELECT * " 3.数据库引擎最好选用InnoDB,少用M ...

  3. mysql 性能优化常见命令

    mysql 性能优化常见命令: 一: 当发现mysql程序运行缓慢时,在排除sql主机问题之后,可以尝试在schema,table,和sql上进一步进行考查: 1:mysql> show ful ...

  4. mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)

    mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...

  5. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...

  6. Mysql性能优化三(分表、增量备份、还原)

    接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...

  7. MySQL性能优化的21个最佳实践

    http://www.searchdatabase.com.cn/showcontent_38045.htm MySQL性能优化的21个最佳实践 1. 为查询缓存优化你的查询 大多数的MySQL服务器 ...

  8. redmine在linux上的mysql性能优化方法与问题排查方案

    iredmine的linux服务器mysql性能优化方法与问题排查方案     问题定位:   客户端工具: 1. 浏览器inspect-tool的network timing工具分析   2. 浏览 ...

  9. MySQL 性能优化--优化数据库结构之优化数据类型

    MySQL性能优化--优化数据库结构之优化数据类型   By:授客  QQ:1033553122   优化数字数据(Numeric Data) l   对于唯一ID或其它可用字符串或数字表示的值,选择 ...

随机推荐

  1. Less tips:声明变量之前可以引用变量!

    Less中的variable可以在使用之后才被声明,这一特性对于希望覆盖前期声明的(比如bootstrap等第三方library的variable)变量,从而优雅地 使用你希望的效果提供了便利. 比如 ...

  2. UVa 10161 Ant on a Chessboard

    一道数学水题,找找规律. 首先要判断给的数在第几层,比如说在第n层.然后判断(n * n - n + 1)(其坐标也就是(n,n)) 之间的关系. 还要注意n的奇偶.  Problem A.Ant o ...

  3. POJ 1201 Intervals (差分约束系统)

    题意 在区间[0,50000]上有一些整点,并且满足n个约束条件:在区间[ui, vi]上至少有ci个整点,问区间[0, 50000]上至少要有几个整点. 思路 差分约束求最小值.把不等式都转换为&g ...

  4. html常用笔记

    <?php //CSS可以对文本格式进行精确的控制 //HTML标记更有利于搜索引擎 //一.标签 <br> <p>//换行后插入一个空行,单字节不换行,双字节自动换行 ...

  5. Android如何获取系统高度、标题栏和状态栏高度

    在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度,标题栏高度等信息.为以后方便,在此做个简单记录. 晒代码前先了解一下android屏幕区域的划分,如下图(该图引用自此文h ...

  6. 《C和指针》读书笔记 第3章-数据

    原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3936488.html

  7. 安装sass时,gem在国内不能安装的解决

    最近在安装SASS的时候,用到gem命令,但是运行出行如下错误!(先声明,安装sass前,要保证自己电脑安装了ruby:ruby -v可以测试下有没有装) 原因是ruby 的gem被和谐了,现在淘宝的 ...

  8. 嵌入式 hi3518平台指定网卡测试是否通外网

    版权声明:本文为博主原创文章,未经博主允许不得转载. /********************************** (C) COPYRIGHT *********************** ...

  9. DOS攻击和DDOS攻击有啥区别啊

    DDOS是DOS攻击中的一种方法. DoS:是Denial of Service的简称,即拒绝服务,不是DOS操作系统,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务. ...

  10. 解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题

    问题背景: 在使用asp.net mvc 结合jquery esayui做一个系统,但是在使用使用this.json方法直接返回一个json对象,在列表中显示时发现datetime类型的数据在转为字符 ...