Mysql-性能分析-Profiling

Mysql-性能分析-Profiling,第1张

Show Profile 是mysql提供可以用来分析 当前会话 语句执行的资源消耗情况,可以用于Sql调优的测量。

请读者继续看前面的图 SQL执行具体细节 ,左边 Status 列展示了一条SQL执行的从开始到清理的整个生命周期中执行的 *** 作。如果在其生命周期阶段出现如下的情况的就要重视了:

开启 Profiling 后,mysql会留下15条最近执行的sql的 现场 , 便于我们发现问题。

Show profiles 用来查最近的15条。

Show profile 用来展示每一个SQL执行阶段的耗时清单,便于我们发现耗时最多的地方,然后以此为依据查找问题所在,最后优化SQL或者优化mysql参数。比如耗时清单创建了临时表,就要考虑表是否创建索引,如果创建了那么是否没有用到或者失效了。

总的来说 Profiling 是一个很不错的mysql性能分析工具。

count(*)是如何实现的?

上述的count(*)指的是在查询的时候不加where条件,不加where条件的count(*)在不同的数据库引擎下有不同的实现:

InnoDB为什么不把总行数存起来?

由于InnoDB的事务支持,同一时刻的多个事务的查询,由于多版本并发控制的(MVCC)的原因,InnoDB表返回的行数是不确定。

InnoDB对COUNT(*)做的优化?

InnoDB是索引组织表,所有的数据都是通过B+数的方式组织起来的,主键索引的叶子节点是整行数据,普通索引的叶子节点是主键值,因此 普通索引树的大小要比主键索引树小的多 。对于count(*),MySQL优化器会找到最小的那棵索引树然后进行遍历。

如果某张大表需要经常性的进行count(*) *** 作,可以考虑单独建立一张表进行保存大表的记录行数。

COUNT的具体含义?

COUNT()是一个聚合函数,对于返回的结果集需要一行一行的进行判断,如果COUNT函数中的参数不为NULL,累计值就加,否则不加。

COUNT的几种用法?

COUNT(*)除了在选择索引树遍历上有优化,而且在执行的过程中不会取值,Server层按照行累加。

COUNT(主键ID),InnoDB会遍历整张表,把每一行的ID值都取出来,返回给Server层。Server层拿到ID以后,判断不可能为空,按行累加。

COUNT(1),InnoDB引擎遍历整张表,但不取值。Server层对于返回的每一行放一个数字"1"进去,判断不可能为空,按行累加。

COUNT(字段),如果字段定义为NOT NULL的话,Server层从记录中取到字段以后判断不可能为NULL,按行累加;但是如果字段允许为NULL,Server层就有可能取到为NULL的记录,此时需要把记录中的值进行判断一下,不是NULL才可以累加。

COUNT效率

COUNT(字段) <COUNT(主键ID) <COUNT(1) COUNT(*)

MySQL中使用show status语句查询MySQL的性能参数

语法:

show status like [statement]

常用statement说明:

# 查询连接MySQL服务器的次数

# 查询MySQL服务器上线的时间

# 查询慢查询的次数

# 查询 查询 *** 作的次数

查看MySQL服务器配置信息 :

查看MySQL服务器运行的各种状态值 :

慢查询:

连接数:

key_buffer_size 是对MyISAM表性能影响最大的一个参数

临时表:

查看open table :

进程使用情况:

查询缓存(query cache) :

文件打开数(open_files) :

表锁情况 :

表扫描情况 :

查询吞吐量:

连接情况:

分析查询语句

mysql提供了explain语句和describe语句,进行分析查询语句

EXPLAIN的语法:

说明:

示例:

DESCRIBE语句

使用方法与EXPLAIN语句是一样的,并且分析结果也是一样的。

语法:

mysql中提高性能的最有效的方式:

1, 对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快了查询的速度。

使用索引查询几种特殊情况:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8365749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存